Author: rich
Date: Fri Aug 13 08:58:42 2004
New Revision: 36354

Added:
   incubator/beehive/trunk/netui/external/jsf/
   incubator/beehive/trunk/netui/external/jsf/myfaces.jar   (contents, props 
changed)
   
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/FacesBackingChecker.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/CommandHandlerGrammar.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/RaiseActionGrammar.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/BackingClassMethodBinding.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/BackingClassVariableResolver.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/PageFlowApplication.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/PageFlowApplicationFactory.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/PageFlowNavigationHandler.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/WEB-INF/faces-config.xml  
 (contents, props changed)
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/dataStructure.jspf
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/error.jsp
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/index/
      - copied from rev 36299, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/index.jsp
      - copied unchanged from rev 36299, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index.jsp
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/index/Beehive.gif
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/Beehive.gif
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/index/Controller.jpf
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/Controller.jpf
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/index/index.jsp
      - copied, changed from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/index.jsp
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/index/linkDown.gif
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/linkDown.gif
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/index/linkOver.gif
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/linkOver.gif
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/index/style.css
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/style.css
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/JpfFacesController.jpf
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page1.jsfb
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page1.jsp
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page2.jsp
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page3.jsp
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page4.jsp
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/page.jspf
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/
      - copied from rev 36299, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/admin.inc
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/admin.inc
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/admin.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/admin.jsp
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/error.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/error.jsp
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/forward.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/forward.jsp
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/forward2.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/forward2.jsp
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/index.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/index.jsp
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/playback.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/playback.jsp
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/record.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/record.jsp
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/redirect.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/redirect.jsp
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/sessionInfo.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/sessionInfo.jsp
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/startRecord.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/startRecord.jsp
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/status.inc
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/status.inc
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/status.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/status.jsp
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/test.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/test.jsp
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/testInfo.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/testInfo.jsp
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/testRecorder/testRecord.jsp
      - copied unchanged from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/testRecorder/testRecord.jsp
Modified:
   incubator/beehive/trunk/netui/ant/common.properties
   
incubator/beehive/trunk/netui/src/compiler/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
   
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/CompilerUtils.java
   
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/JpfLanguageConstants.java
   
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java
   
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/apt/PageFlowAnnotationProcessor.java
   
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties
   incubator/beehive/trunk/netui/src/pageflow/build.xml
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowJspFilter.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalConstants.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java
   
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/FileUtils.java
   incubator/beehive/trunk/netui/test/webapps/jsf/build.xml
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/Backing.java
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/WEB-INF/web.xml
   incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/faces.jsp
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Controller.jpf
   
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/index.jsp
   
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/config/testRecorder-config.xml
   
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeAnchors.xml
   
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeBundle.xml
   
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeConversions.xml
   
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeDataTable.xml
   
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormOne.xml
   
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormTwo.xml
   
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeImage.xml
   
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokePanel.xml
   incubator/beehive/trunk/test/ant/buildWebapp.xml
Log:
Preliminary integration of JSF with page flows.  To enable this, add the 
following entry in the <factory> section of your faces-config.xml:
    
<application-factory>org.apache.beehive.netui.pageflow.faces.PageFlowApplicationFactory</application-factory>

This enablees the following features:
    - 'Backing class' management: each JSF-enabled JSP can have an implicitly 
associated class that serves as a home for command handlers, backing component 
objects, and other view-related state (as well as Java Controls in a subsequent 
checkin).  The class name is derived from the JSP's webapp-rooted URI: 
/foo/bar.jsp -> class foo.bar.  This class must have the @Jpf.FacesBacking 
annotation, and it can optionally have a ".jsfb" extension and live alongside 
its JSP in the webapp.  The class is instantiated by the runtime before its JSP 
is rendered, and is removed/replaced only when a new JSP is rendered.

    - Raising Page Flow actions from JSF pages: when there is a page flow for 
the current request, actions raised from JSF pages or backing classes are 
handled by the page flow.  Actions can be raised through the "action" attribute 
on h:command* tags, or through command handlers in backing classes.  Command 
handlers annotated with @Jpf.CommandHandler can also pass form beans to page 
flow actions (see example mentioned below).

    - "backing" implicit bean: JSF pages can bind to properties in the backing 
class through expressions like "#{backing.foo}".

For an example, see netui/test/webapps/jsf/jsfWeb/jpfFaces/*.  To run this, you 
must first point the JSF_HOME environment variable to a JavaServer Faces 1.1 
Reference Implementation distribution.

Note: The TestRecorder filter is currently incompatible with JSF.  This will be 
fixed elsewhere; for now, TR and the JSF-related DRTs are disabled.

Things left to do:
    - Ability for backing classes to host Controls in the same way page flow 
classes host controls.
    - Integration of JSF with @Jpf.Forward's 
navigateTo=Jpf.NavigateTo.currentPage/previousPage.

DRT: netui (WinXP)
buddy build: self



Modified: incubator/beehive/trunk/netui/ant/common.properties
==============================================================================
--- incubator/beehive/trunk/netui/ant/common.properties (original)
+++ incubator/beehive/trunk/netui/ant/common.properties Fri Aug 13 08:58:42 2004
@@ -64,6 +64,11 @@
 commons-validator.jar=${struts.dir}/commons-validator.jar
 
 #
+# JSF
+#
+jsf-api.jar=${jsf.dir}/myfaces.jar
+
+#
 # External TLDs
 #
 struts11.logic.tld=${struts.dir}/struts-logic.tld

Added: incubator/beehive/trunk/netui/external/jsf/myfaces.jar
==============================================================================
Binary file. No diff available.

Modified: 
incubator/beehive/trunk/netui/src/compiler/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
==============================================================================
--- 
incubator/beehive/trunk/netui/src/compiler/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
  (original)
+++ 
incubator/beehive/trunk/netui/src/compiler/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
  Fri Aug 13 08:58:42 2004
@@ -1,4 +1 @@
-#
-# This configures APT so the ControlProcessorFactory can be used to process 
Control annotations
-#
 org.apache.beehive.netui.compiler.apt.PageFlowAnnotationProcessorFactory

Modified: 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/CompilerUtils.java
==============================================================================
--- 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/CompilerUtils.java
     (original)
+++ 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/CompilerUtils.java
     Fri Aug 13 08:58:42 2004
@@ -698,6 +698,7 @@
             fileRelativePath = fileRelativePath.substring( 0, extensionPos );
             retVal = new File( webappRootPath + fileRelativePath + 
JPF_FILE_EXTENSION_DOT );
             if ( ! retVal.exists() ) retVal = new File( webappRootPath + 
fileRelativePath + SHARED_FLOW_FILE_EXTENSION_DOT );
+            if ( ! retVal.exists() ) retVal = new File( webappRootPath + 
fileRelativePath + FACES_BACKING_FILE_EXTENSION_DOT );
             
             // See if the .java file lives in WEB-INF/src.
             if ( ! retVal.exists() )
@@ -858,5 +859,10 @@
         {
             return _getter;
         }
+    }
+    
+    public static boolean isPageFlowClass( ClassDeclaration jclass, 
AnnotationProcessorEnvironment env )
+    {
+        return getAnnotation( jclass, CONTROLLER_TAG_NAME ) != null && 
isAssignableFrom( JPF_BASE_CLASS, jclass, env );
     }
 }

Added: 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/FacesBackingChecker.java
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/FacesBackingChecker.java
       Fri Aug 13 08:58:42 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;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.ClassDeclaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+
+import java.util.Map;
+import java.util.Collection;
+
+import org.apache.beehive.netui.compiler.grammar.CommandHandlerGrammar;
+
+import static 
org.apache.beehive.netui.compiler.JpfLanguageConstants.COMMAND_HANDLER_TAG_NAME;
+
+
+public class FacesBackingChecker
+        extends BaseChecker
+{
+    public FacesBackingChecker( AnnotationProcessorEnvironment env, 
Diagnostics diags )
+    {
+        super( env, diags );
+    }
+    
+    public BaseGenerator getGenerator()
+    {
+        return null;
+    }
+    
+    public Map onCheck( ClassDeclaration jclass )
+    {
+        Collection< ClassDeclaration > packageClasses = 
jclass.getPackage().getClasses();
+        ClassDeclaration jpfClass = null;
+        
+        for ( ClassDeclaration classDecl : packageClasses )
+        {
+            if ( CompilerUtils.isPageFlowClass( classDecl, getEnv() ) )
+            {
+                jpfClass = classDecl;
+            }
+        }
+        
+        CommandHandlerGrammar chg =
+                new CommandHandlerGrammar( getEnv(), getDiagnostics(), 
getRuntimeVersionChecker(), jpfClass );
+        Collection< MethodDeclaration > methods = 
CompilerUtils.getClassMethods( jclass, COMMAND_HANDLER_TAG_NAME );
+
+        for ( MethodDeclaration method : methods )
+        {
+            chg.check( CompilerUtils.getAnnotation( method, 
COMMAND_HANDLER_TAG_NAME ), method );
+        }
+        
+        return null;
+    }
+}

Modified: 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/JpfLanguageConstants.java
==============================================================================
--- 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/JpfLanguageConstants.java
      (original)
+++ 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/JpfLanguageConstants.java
      Fri Aug 13 08:58:42 2004
@@ -56,6 +56,7 @@
 
     public static final String BEGIN_ACTION_NAME = "begin";
     public static final String JPF_FILE_EXTENSION = "jpf";
+    public static final String FACES_BACKING_FILE_EXTENSION = "jsfb";
     public static final String JAVA_FILE_EXTENSION = "java";
     public static final String JSP_FILE_EXTENSION = "jsp";
     public static final String XJSP_FILE_EXTENSION = "jspx";
@@ -63,6 +64,7 @@
     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 FACES_BACKING_FILE_EXTENSION_DOT = "." + 
FACES_BACKING_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;

Modified: 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java
==============================================================================
--- 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java
   (original)
+++ 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/PageFlowChecker.java
   Fri Aug 13 08:58:42 2004
@@ -33,6 +33,7 @@
 import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.io.File;
 import java.io.FilenameFilter;
 import java.io.IOException;
@@ -105,29 +106,14 @@
     protected void doAdditionalClassChecks( ClassDeclaration jpfClass, File 
webappRoot )
     {
         PackageDeclaration pkg = jpfClass.getPackage();
-        File jpfFile = CompilerUtils.getOriginalFile( jpfClass );
+        Collection< ClassDeclaration > packageClasses = pkg.getClasses();
+        ArrayList< String > overlapping = new ArrayList< String >();
         
-        //
-        // 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 ( ClassDeclaration classDecl : packageClasses )
         {
-            for ( int i = 0; i < files.length; i++ )
+            if ( ! classDecl.equals( jpfClass ) && 
CompilerUtils.isPageFlowClass( classDecl, getEnv() ) )
             {
-                File file = files[i];
-                if ( ! file.getPath().equals( jpfFile.getPath() ) )
-                {
-                    overlapping.add( file.getName() );
-                }
+                overlapping.add( CompilerUtils.getOriginalFile( classDecl 
).getName() );
             }
         }
             
@@ -147,7 +133,8 @@
         //
         // Check the package name.
         //
-        File parentDir = jpfFile.getAbsoluteFile().getParentFile();
+        String jpfPackageName = pkg.getQualifiedName();
+        File parentDir = CompilerUtils.getOriginalFile( jpfClass 
).getAbsoluteFile().getParentFile();
         if ( parentDir.equals( webappRoot.getPath() ) )
         {
             if ( jpfPackageName != null && jpfPackageName.length() > 0 )

Modified: 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/apt/PageFlowAnnotationProcessor.java
==============================================================================
--- 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/apt/PageFlowAnnotationProcessor.java
   (original)
+++ 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/apt/PageFlowAnnotationProcessor.java
   Fri Aug 13 08:58:42 2004
@@ -28,6 +28,7 @@
 import org.apache.beehive.netui.compiler.FlowControllerInfo;
 import org.apache.beehive.netui.compiler.PageFlowChecker;
 import org.apache.beehive.netui.compiler.SharedFlowChecker;
+import org.apache.beehive.netui.compiler.FacesBackingChecker;
 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;
@@ -35,6 +36,7 @@
 import static 
org.apache.beehive.netui.compiler.JpfLanguageConstants.SHARED_FLOW_FILE_EXTENSION_DOT;
 import static 
org.apache.beehive.netui.compiler.JpfLanguageConstants.GLOBALAPP_FILE_EXTENSION_DOT;
 import static 
org.apache.beehive.netui.compiler.JpfLanguageConstants.CONTROLLER_TAG_NAME;
+import static 
org.apache.beehive.netui.compiler.JpfLanguageConstants.FACES_BACKING_TAG_NAME;
 import static 
org.apache.beehive.netui.compiler.JpfLanguageConstants.ANNOTATIONS_CLASSNAME;
 
 
@@ -51,7 +53,11 @@
         FlowControllerInfo fcInfo =
                 new FlowControllerInfo( CompilerUtils.getOriginalFile( 
classDecl ), classDecl.getQualifiedName() );
         
-        if ( CompilerUtils.isAssignableFrom( JPF_BASE_CLASS, classDecl, 
getEnv() ) )
+        if ( CompilerUtils.getAnnotation( classDecl, FACES_BACKING_TAG_NAME ) 
!= null )
+        {
+            return new FacesBackingChecker( getEnv(), diagnostics );
+        }
+        else if ( CompilerUtils.isAssignableFrom( JPF_BASE_CLASS, classDecl, 
getEnv() ) )
         {
             if ( expectControllerAnnotation( classDecl, 
JPF_FILE_EXTENSION_DOT, JPF_BASE_CLASS, diagnostics ) )
             {
@@ -105,7 +111,8 @@
         }
         else if ( ! CompilerUtils.hasModifier( classDecl, Modifier.ABSTRACT ) )
         {
-            diagnostics.addWarning( classDecl, 
"warning.no-controller-annotation", baseClass );
+            diagnostics.addWarning( classDecl, 
"warning.no-controller-annotation", baseClass,
+                                    ANNOTATIONS_CLASSNAME + "." + 
CONTROLLER_TAG_NAME );
         }
         
         return false;

Modified: 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties
==============================================================================
--- 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties
 (original)
+++ 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties
 Fri Aug 13 08:58:42 2004
@@ -136,3 +136,5 @@
 
 error.controller-annotation-required = Files ending with "{0}" must have the 
{1} annotation.
 warning.no-controller-annotation = This class extends {0}, but it does not 
have the {1} annotation and is not abstract.
+
+warning.no-such-action = There is no action "{0}" in page flow {1}.

Added: 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/CommandHandlerGrammar.java
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/CommandHandlerGrammar.java
     Fri Aug 13 08:58:42 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.compiler.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.ClassDeclaration;
+
+import static 
org.apache.beehive.netui.compiler.JpfLanguageConstants.RAISE_ACTIONS_ATTR;
+
+
+public class CommandHandlerGrammar
+        extends AnnotationGrammar
+{
+    public CommandHandlerGrammar( AnnotationProcessorEnvironment env, 
Diagnostics diags, RuntimeVersionChecker rvc,
+                                  ClassDeclaration jpfClass )
+    {
+        super( env, diags, null, rvc );
+        addMemberArrayGrammar( RAISE_ACTIONS_ATTR, new RaiseActionGrammar( 
env, diags, null, rvc, jpfClass ) );
+    }
+}

Added: 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/RaiseActionGrammar.java
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/RaiseActionGrammar.java
        Fri Aug 13 08:58:42 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.grammar;
+
+import org.apache.beehive.netui.compiler.AnnotationGrammar;
+import org.apache.beehive.netui.compiler.Diagnostics;
+import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
+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.ClassDeclaration;
+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.OUTPUT_FORM_BEAN_ATTR;
+import static 
org.apache.beehive.netui.compiler.JpfLanguageConstants.ACTION_ATTR;
+
+
+public class RaiseActionGrammar
+        extends AnnotationGrammar
+{
+    public RaiseActionGrammar( AnnotationProcessorEnvironment env, Diagnostics 
diags, String requiredRuntimeVersion,
+                               RuntimeVersionChecker runtimeVersionChecker, 
ClassDeclaration jpfClass )
+    {
+        super( env, diags, requiredRuntimeVersion, runtimeVersionChecker );
+        addMemberType( ACTION_ATTR, new PageFlowActionType( jpfClass ) );
+        addMemberType( OUTPUT_FORM_BEAN_ATTR, new MemberFieldType( null , 
null, this ) );
+    }
+    
+    private class PageFlowActionType
+            extends AnnotationMemberType
+    {
+        private ClassDeclaration _jpfClass;
+        
+        public PageFlowActionType( ClassDeclaration jpfClass )
+        {
+            super( RaiseActionGrammar.this.getRequiredRuntimeVersion(), 
RaiseActionGrammar.this );
+            _jpfClass = jpfClass;
+        }
+
+        protected Object onCheck( AnnotationTypeElementDeclaration valueDecl, 
AnnotationValue member,
+                                  AnnotationMirror parentAnnotation, 
MemberDeclaration classMember )
+        {
+            String action = ( String ) member.getValue();
+            
+            if ( _jpfClass != null && ! WebappPathOrActionType.actionExists( 
action, _jpfClass, null ) )
+            {
+                getDiagnostics().addWarning( member, "warning.no-such-action", 
action, 
+                                             CompilerUtils.getOriginalFile( 
_jpfClass ) );
+            }
+            
+            return null;
+        }
+    }
+}

Modified: incubator/beehive/trunk/netui/src/pageflow/build.xml
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/build.xml        (original)
+++ incubator/beehive/trunk/netui/src/pageflow/build.xml        Fri Aug 13 
08:58:42 2004
@@ -2,7 +2,7 @@
 
 <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}"/>
+    <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};${jsf-api.jar}"/>
 
     <target name="compile">
         <echo>compile module: ${module.name}</echo>

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowJspFilter.java
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowJspFilter.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowJspFilter.java
 Fri Aug 13 08:58:42 2004
@@ -215,6 +215,7 @@
                                     BundleMap bundleMap = new 
BundleMap(httpRequest, _servletContext, null);
                                     httpRequest.setAttribute("bundle", 
bundleMap);
 
+                                    InternalUtils.setFacesBackingBean( 
httpRequest, _servletContext );
                                     chain.doFilter( request, response );
                                 }
                                 finally

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/BackingClassMethodBinding.java
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/BackingClassMethodBinding.java
   Fri Aug 13 08:58:42 2004
@@ -0,0 +1,159 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 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.faces;
+
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+import javax.faces.el.MethodBinding;
+import javax.faces.el.MethodNotFoundException;
+import javax.faces.el.EvaluationException;
+import javax.faces.context.FacesContext;
+import javax.faces.component.StateHolder;
+import javax.faces.component.UIComponentBase;
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+import java.lang.reflect.Field;
+
+// TODO: rich needs to doc this when he gets all 10 of his fingers back
+// TODO: move to internal
+public class BackingClassMethodBinding
+        extends MethodBinding
+        implements StateHolder
+{
+    private String _methodName;
+    private Class[] _params;
+    private MethodBinding _delegate;
+    private boolean _transient = false;
+    
+
+    public BackingClassMethodBinding()
+    {
+    }
+    
+    public BackingClassMethodBinding( String methodName, Class[] params, 
MethodBinding delegate )
+    {
+        _methodName = methodName;
+        _params = params;
+        _delegate = delegate;
+    }
+
+    public Class getType( FacesContext context )
+        throws MethodNotFoundException
+    {
+        return _delegate.getType( context );
+    }
+
+    public String getExpressionString() {
+        return _delegate.getExpressionString();
+    }
+
+    public Object invoke( FacesContext context, Object params[] )
+        throws EvaluationException, MethodNotFoundException
+    {
+        Object result = _delegate.invoke( context, params );
+        
+        if ( result instanceof String )
+        {
+            String action = ( String ) result;
+            Object request = context.getExternalContext().getRequest();
+            assert request != null;
+            assert request instanceof HttpServletRequest : 
request.getClass().getName();
+            
+            HttpServletRequest httpRequest = ( HttpServletRequest ) request;
+            Object backingBean = InternalUtils.getFacesBackingBean( 
httpRequest );
+            
+            if ( backingBean != null )
+            {
+                Class backingClass = backingBean.getClass();
+                
+                try
+                {
+                    Method method = backingClass.getMethod( _methodName, 
_params );
+                    Jpf.CommandHandler ann = method.getAnnotation( 
Jpf.CommandHandler.class );
+                    
+                    if ( ann != null )
+                    {
+                        Jpf.RaiseAction[] raiseActions = ann.raiseActions();
+                        
+                        for ( int i = 0; i < raiseActions.length; i++ )
+                        {
+                            Jpf.RaiseAction raiseAction = raiseActions[i];
+                            
+                            if ( raiseAction.action().equals( action ) )
+                            {
+                                String formBeanMember = 
raiseAction.outputFormBean();
+                                
+                                if ( formBeanMember.length() > 0 )
+                                {
+                                    try
+                                    {
+                                        // TODO: must cache fields and 
annotations
+                                        Field field = 
backingClass.getDeclaredField( formBeanMember );
+                                        field.setAccessible( true );
+                                        Object value = field.get( backingBean 
);
+                                        InternalUtils.setForwardedForm( 
InternalUtils.wrapFormBean( value ), httpRequest );
+                                    }
+                                    catch ( NoSuchFieldException e )
+                                    {
+                                        e.printStackTrace( );    // TODO: log
+                                    }
+                                    catch ( IllegalAccessException e )
+                                    {
+                                        e.printStackTrace( );    // TODO: log
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                catch ( NoSuchMethodException e )
+                {
+                    e.printStackTrace( );    // TODO: log
+                }
+            }
+        }
+        
+        return result;
+    }
+
+    public Object saveState( FacesContext context )
+    {
+        return new Object[]{ _methodName, _params, 
UIComponentBase.saveAttachedState( context, _delegate ) };
+    }
+
+    public void restoreState( FacesContext context, Object state )
+    {
+        Object[] values = ( Object[] ) state;
+        _methodName = ( String ) values[0];
+        _params = ( Class[] ) values[1];
+        _delegate = ( MethodBinding ) UIComponentBase.restoreAttachedState( 
context, values[2] );
+    }
+
+    public boolean isTransient()
+    {
+        return _transient;
+    }
+
+    public void setTransient( boolean newTransientValue )
+    {
+        _transient = newTransientValue;
+    }
+}
+

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/BackingClassVariableResolver.java
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/BackingClassVariableResolver.java
        Fri Aug 13 08:58:42 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.pageflow.faces;
+
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.internal.InternalConstants;
+
+import javax.faces.el.VariableResolver;
+import javax.faces.el.EvaluationException;
+import javax.faces.context.FacesContext;
+import javax.servlet.http.HttpServletRequest;
+
+// TODO: rich needs to doc this when he gets all 10 of his fingers back
+// TODO: move to internal
+public class BackingClassVariableResolver
+        extends VariableResolver
+{
+    private VariableResolver _delegate;
+
+    public BackingClassVariableResolver( VariableResolver delegate )
+    {
+        _delegate = delegate;
+    }
+
+    public Object resolveVariable( FacesContext context, String name ) throws 
EvaluationException
+    {
+        if ( InternalConstants.BACKING_CLASS_IMPLICIT_OBJECT.equals( name ) )
+        {
+            Object request = context.getExternalContext().getRequest();
+            assert request != null;
+            assert request instanceof HttpServletRequest : 
request.getClass().getName();
+            return InternalUtils.getFacesBackingBean( ( HttpServletRequest ) 
request );
+        }
+        
+        return _delegate.resolveVariable( context, name );
+    }
+}
+

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/PageFlowApplication.java
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/PageFlowApplication.java
 Fri Aug 13 08:58:42 2004
@@ -0,0 +1,253 @@
+/*
+ * B E A   S Y S T E M S
+ * Copyright 2002-2004  BEA Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 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.faces;
+
+import org.apache.beehive.netui.pageflow.internal.InternalConstants;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.faces.FacesException;
+import javax.faces.application.Application;
+import javax.faces.application.NavigationHandler;
+import javax.faces.application.StateManager;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.el.MethodBinding;
+import javax.faces.el.PropertyResolver;
+import javax.faces.el.ReferenceSyntaxException;
+import javax.faces.el.ValueBinding;
+import javax.faces.el.VariableResolver;
+import javax.faces.event.ActionListener;
+import javax.faces.validator.Validator;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Locale;
+
+// TODO: rich needs to doc this when he gets all 10 of his fingers back
+public class PageFlowApplication
+        extends Application
+{
+    private static final String BACKING_BINDING_START = "#{" + 
InternalConstants.BACKING_CLASS_IMPLICIT_OBJECT + '.';
+    
+    private static final Logger _log = Logger.getInstance( 
PageFlowApplication.class );
+    
+    private Application _delegate;
+
+    
+    public PageFlowApplication( Application delegate )
+    {
+        if ( _log.isDebugEnabled() )
+        {
+            _log.debug( "Adapting Application" + delegate );
+        }
+        
+        _delegate = delegate;
+    }
+    
+    public ActionListener getActionListener()
+    {
+        return _delegate.getActionListener();
+    }
+
+    public void setActionListener( ActionListener listener )
+    {
+        _delegate.setActionListener( listener );
+    }
+
+    public Locale getDefaultLocale()
+    {
+        return _delegate.getDefaultLocale();
+    }
+
+    public void setDefaultLocale( Locale locale )
+    {
+        _delegate.setDefaultLocale( locale );
+    }
+
+    public String getDefaultRenderKitId()
+    {
+        return _delegate.getDefaultRenderKitId();
+    }
+
+    public void setDefaultRenderKitId( String renderKitId )
+    {
+        _delegate.setDefaultRenderKitId( renderKitId );
+    }
+
+    public String getMessageBundle()
+    {
+        return _delegate.getMessageBundle();
+    }
+
+    public void setMessageBundle( String bundle )
+    {
+        _delegate.setMessageBundle( bundle );
+    }
+
+    public NavigationHandler getNavigationHandler()
+    {
+        return _delegate.getNavigationHandler();
+    }
+
+    public void setNavigationHandler( NavigationHandler handler )
+    {
+        _delegate.setNavigationHandler( new PageFlowNavigationHandler( handler 
) );
+    }
+
+    public PropertyResolver getPropertyResolver()
+    {
+        return _delegate.getPropertyResolver();
+    }
+
+    public void setPropertyResolver( PropertyResolver resolver )
+    {
+        _delegate.setPropertyResolver( resolver );
+    }
+
+    public VariableResolver getVariableResolver()
+    {
+        return _delegate.getVariableResolver();
+    }
+
+    public void setVariableResolver( VariableResolver resolver )
+    {
+        _delegate.setVariableResolver( new BackingClassVariableResolver( 
resolver ) );
+    }
+
+    public ViewHandler getViewHandler()
+    {
+        return _delegate.getViewHandler();
+    }
+
+    public void setViewHandler( ViewHandler handler )
+    {
+        _delegate.setViewHandler( handler );
+    }
+
+    public StateManager getStateManager()
+    {
+        return _delegate.getStateManager();
+    }
+
+    public void setStateManager( StateManager manager )
+    {
+        _delegate.setStateManager( manager );
+    }
+
+    public void addComponent( String componentType, String componentClass )
+    {
+        _delegate.addComponent( componentType, componentClass );
+    }
+
+    public UIComponent createComponent( String componentType )
+            throws FacesException
+    {
+        return _delegate.createComponent( componentType );
+    }
+
+    public UIComponent createComponent( ValueBinding componentBinding, 
FacesContext context, String componentType )
+            throws FacesException
+    {
+        return _delegate.createComponent( componentBinding, context, 
componentType );
+    }
+
+    public Iterator getComponentTypes()
+    {
+        return _delegate.getComponentTypes();
+    }
+
+    public void addConverter( String converterId, String converterClass )
+    {
+        _delegate.addConverter( converterId, converterClass );
+    }
+
+    public void addConverter( Class targetClass, String converterClass )
+    {
+        _delegate.addConverter( targetClass, converterClass );
+    }
+
+    public Converter createConverter( String converterId )
+    {
+        return _delegate.createConverter( converterId );
+    }
+
+    public Converter createConverter( Class targetClass )
+    {
+        return _delegate.createConverter( targetClass );
+    }
+
+    public Iterator getConverterIds()
+    {
+        return _delegate.getConverterIds();
+    }
+
+    public Iterator getConverterTypes()
+    {
+        return _delegate.getConverterTypes();
+    }
+
+    public MethodBinding createMethodBinding( String ref, Class params[] )
+            throws ReferenceSyntaxException
+    {
+        MethodBinding mb = _delegate.createMethodBinding( ref, params );
+        
+        if ( ref.startsWith( BACKING_BINDING_START ) && ref.endsWith( "}" ) )
+        {
+            String methodName = ref.substring( BACKING_BINDING_START.length(), 
ref.length() - 1 );
+            return new BackingClassMethodBinding( methodName, params, mb );
+        }
+        else
+        {
+            return mb;
+        }
+    }
+    
+    public Iterator getSupportedLocales()
+    {
+        return _delegate.getSupportedLocales();
+    }
+
+    public void setSupportedLocales( Collection locales )
+    {
+        _delegate.setSupportedLocales( locales );
+    }
+
+    public void addValidator( String validatorId, String validatorClass )
+    {
+        _delegate.addValidator( validatorId, validatorClass );
+    }
+
+    public Validator createValidator( String validatorId )
+            throws FacesException
+    {
+        return _delegate.createValidator( validatorId );
+    }
+
+    public Iterator getValidatorIds()
+    {
+        return _delegate.getValidatorIds();
+    }
+
+    public ValueBinding createValueBinding( String ref )
+            throws ReferenceSyntaxException
+    {
+        return _delegate.createValueBinding( ref );
+    }
+}

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/PageFlowApplicationFactory.java
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/PageFlowApplicationFactory.java
  Fri Aug 13 08:58:42 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.faces;
+
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.faces.application.ApplicationFactory;
+import javax.faces.application.Application;
+
+// TODO: rich needs to doc this when he gets all 10 of his fingers back
+public class PageFlowApplicationFactory
+        extends ApplicationFactory
+{
+    private static final Logger _log = Logger.getInstance( 
PageFlowApplicationFactory.class );
+    
+    private ApplicationFactory _delegate;
+    private PageFlowApplication _app;
+    
+    public PageFlowApplicationFactory( ApplicationFactory delegate )
+    {
+        if ( _log.isDebugEnabled() )
+        {
+            _log.debug( "Adapting ApplicationFactory" + delegate );
+        }
+        
+        _delegate = delegate;
+        _app = new PageFlowApplication( delegate.getApplication() );
+    }
+    
+    public Application getApplication()
+    {
+        return _app;
+    }
+
+    public void setApplication( Application application )
+    {
+        _delegate.setApplication( application );
+        _app = new PageFlowApplication( application );
+    }
+}

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/PageFlowNavigationHandler.java
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/faces/PageFlowNavigationHandler.java
   Fri Aug 13 08:58:42 2004
@@ -0,0 +1,88 @@
+package org.apache.beehive.netui.pageflow.faces;
+
+import javax.faces.application.NavigationHandler;
+import javax.faces.application.ApplicationFactory;
+import javax.faces.context.FacesContext;
+import javax.faces.FactoryFinder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+
+import java.io.IOException;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.PageFlowConstants;
+import org.apache.beehive.netui.pageflow.FlowControllerFactory;
+import org.apache.beehive.netui.util.logging.Logger;
+
+
+// TODO: rich needs to doc this when he gets all 10 of his fingers back
+public class PageFlowNavigationHandler
+    extends NavigationHandler
+{
+    private static final Logger _log = Logger.getInstance( 
PageFlowNavigationHandler.class );
+    
+    private NavigationHandler _baseHandler;
+
+
+    public PageFlowNavigationHandler( NavigationHandler base )
+    {
+        if ( _log.isDebugEnabled() )
+        {
+            _log.debug( "Adapting NavigationHandler" + base );
+        }
+        
+        _baseHandler = base;
+    }
+
+    public void handleNavigation( FacesContext context, String fromAction, 
String outcome )
+    {
+        Object request = context.getExternalContext().getRequest();
+        Object response = context.getExternalContext().getResponse();
+        Object extContext = context.getExternalContext().getContext();
+
+        if ( request instanceof HttpServletRequest && response instanceof 
HttpServletResponse
+            && extContext instanceof ServletContext )
+        {
+            HttpServletRequest httpRequest = ( HttpServletRequest ) request;
+            HttpServletResponse httpResponse = ( HttpServletResponse ) 
response;
+            ServletContext servletContext = ( ServletContext ) extContext;
+            PageFlowController pfc = 
FlowControllerFactory.getPageFlowForRequest( httpRequest, httpResponse, 
servletContext );
+            PageFlowUtils.getCurrentPageFlow( httpRequest );
+
+            if ( pfc != null )
+            {
+                if ( outcome != null )
+                {
+                    try
+                    {
+                        String actionURI = outcome + 
PageFlowConstants.ACTION_EXTENSION;
+                        
+                        if ( _log.isDebugEnabled() )
+                        {
+                            _log.debug( "Forwarding to " + actionURI );
+                        }
+                        
+                        httpRequest.getRequestDispatcher( actionURI ).forward( 
httpRequest, httpResponse );
+                    }
+                    catch ( IOException e )
+                    {
+                        // TODO: log
+                        e.printStackTrace();
+                    }
+                    catch ( ServletException e )
+                    {
+                        // TODO: log
+                        e.printStackTrace();
+                    }
+                }
+
+                return;
+            }
+        }
+
+        _baseHandler.handleNavigation( context, fromAction, outcome );
+    }
+}

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalConstants.java
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalConstants.java
        (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalConstants.java
        Fri Aug 13 08:58:42 2004
@@ -26,4 +26,7 @@
      */ 
     public static final String MESSAGE_IS_EXPRESSION_PREFIX = 
"NETUI-EXPRESSION:";
     public static final int MESSAGE_IS_EXPRESSION_PREFIX_LENGTH = 
MESSAGE_IS_EXPRESSION_PREFIX.length();
+    
+    public static final String FACES_BACKING_ATTR = 
InternalUtils.class.getName() + "_facesBacking";
+    public static final String BACKING_CLASS_IMPLICIT_OBJECT = "backing";
 }

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java
    (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java
    Fri Aug 13 08:58:42 2004
@@ -26,12 +26,14 @@
 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.annotations.Jpf;
 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 org.apache.beehive.netui.util.FileUtils;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -59,6 +61,9 @@
 import org.apache.struts.config.FormBeanConfig;
 import org.apache.struts.Globals;
 
+import static org.apache.beehive.netui.pageflow.internal.InternalConstants.*;
+
+
 public class InternalUtils
         implements PageFlowConstants
 {
@@ -933,5 +938,60 @@
     public static void setGlobalApp( GlobalApp ga, HttpServletRequest request )
     {
         request.getSession().setAttribute( GLOBALAPP_ATTR, ga );
+    }
+    
+    public static void setFacesBackingBean( HttpServletRequest request, 
ServletContext servletContext )
+    {
+        String relativeURI = PageFlowUtils.getRelativeURI( request, 
InternalUtils.decodeURI( request ), null );
+        assert relativeURI.startsWith( "/" ) : relativeURI;
+        String backingClassName = FileUtils.stripFileExtension( 
relativeURI.substring( 1 ).replace( '/', '.' ) );
+        Object currentBean = getFacesBackingBean( request );
+        
+        if ( currentBean == null || ! currentBean.getClass().getName().equals( 
backingClassName ) )
+        {
+            try
+            {
+                Class backingClass =
+                    ContextCache.get( servletContext 
).getReloadableClassHandler().loadClass( backingClassName, request );
+                
+                if ( backingClass.getAnnotation( Jpf.FacesBacking.class ) != 
null )
+                {
+                    request.getSession().setAttribute( FACES_BACKING_ATTR, 
backingClass.newInstance() );
+                    return;
+                }
+                else
+                {
+                    if ( _log.isDebugEnabled() )
+                    {
+                        _log.debug( "Found matching backing class " + 
backingClassName + "for request " 
+                                    + request.getRequestURI() + ", but it does 
not have the "
+                                    + Jpf.FacesBacking.class.getName() + " 
annotation." );
+                    }
+                }
+            }
+            catch ( ClassNotFoundException e )
+            {
+                if ( _log.isTraceEnabled() )
+                {
+                    _log.trace( "No backing bean class found for request " + 
request.getRequestURI() );
+                }
+            }
+            catch ( InstantiationException e )
+            {
+                _log.error( "Could not create backing bean instance of " + 
backingClassName, e );
+            }
+            catch ( IllegalAccessException e )
+            {
+                _log.error( "Could not create backing bean instance of " + 
backingClassName, e );
+            }
+            
+            request.getSession().removeAttribute( FACES_BACKING_ATTR );
+        }
+    }
+    
+    public static Object getFacesBackingBean( HttpServletRequest request )
+    {
+        HttpSession session = request.getSession( false );
+        return session != null ? session.getAttribute( FACES_BACKING_ATTR ) : 
null;
     }
 }

Modified: 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/FileUtils.java
==============================================================================
--- 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/FileUtils.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/FileUtils.java
 Fri Aug 13 08:58:42 2004
@@ -85,8 +85,13 @@
     public static String getFileExtension( String filename )
     {
         int lastDot = filename.lastIndexOf( '.' );
-        
-        return ( lastDot != -1 ? filename.substring( lastDot + 1 ) : "" );
+        return lastDot != -1 ? filename.substring( lastDot + 1 ) : "";
+    }    
+    
+    public static String stripFileExtension( String filename )
+    {
+        int lastDot = filename.lastIndexOf( '.' );
+        return lastDot != -1 ? filename.substring( 0, lastDot ) : filename;
     }    
 
     /**

Modified: incubator/beehive/trunk/netui/test/webapps/jsf/build.xml
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/jsf/build.xml    (original)
+++ incubator/beehive/trunk/netui/test/webapps/jsf/build.xml    Fri Aug 13 
08:58:42 2004
@@ -28,6 +28,21 @@
     <!--                                                                  -->
     <!-- ================================================================ -->
     <target name="build" description="Build webapp">
+        <fail unless="os.JSF_HOME" message="JSF_HOME must point to the 
JavaServer Faces 1.1 Reference Implementation distribution."/>
+
+        <property name="webapp.dir" location="${app.dir}/jsf/${webapp.name}"/>
+        <property name="webinf.dir" value="${webapp.dir}/WEB-INF"/>
+        <copy todir="${webinf.dir}/lib" overwrite="true" failonerror="true">
+            <fileset dir="${os.JSF_HOME}/lib">
+                <include name="*.jar"/>
+            </fileset>
+        </copy>
+        <copy todir="${webinf.dir}" overwrite="true" failonerror="true">
+            <fileset dir="${os.JSF_HOME}/lib">
+                <include name="*.tld"/>
+            </fileset>
+        </copy>
+
         <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"/>
@@ -64,6 +79,7 @@
         <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="http://localhost:8080/${webapp.name}"/>
         </ant>
     </target>
 

Added: 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/WEB-INF/faces-config.xml
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/WEB-INF/faces-config.xml  
    Fri Aug 13 08:58:42 2004
@@ -0,0 +1,117 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!--
+ Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
+ 
+ Redistribution and use in source and binary forms, with or
+ without modification, are permitted provided that the following
+ conditions are met:
+ 
+ - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ 
+ - Redistribution 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.
+    
+ Neither the name of Sun Microsystems, Inc. or the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+  
+ This software is provided "AS IS," without a warranty of any
+ kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
+ WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
+ EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY
+ DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR
+ RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR
+ ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
+ FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
+ SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
+ CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
+ THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS
+ BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+  
+ You acknowledge that this software is not designed, licensed or
+ intended for use in the design, construction, operation or
+ maintenance of any nuclear facility.
+-->
+
+<!DOCTYPE faces-config PUBLIC
+  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
+  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd";>
+
+<faces-config>
+
+  <application>
+    <locale-config>
+      <default-locale>en</default-locale>
+      <supported-locale>de</supported-locale>
+      <supported-locale>fr</supported-locale>
+      <supported-locale>es</supported-locale>
+    </locale-config>
+  </application>
+
+  <factory>
+    
<application-factory>org.apache.beehive.netui.pageflow.faces.PageFlowApplicationFactory</application-factory>
+  </factory>
+
+  <navigation-rule>
+    <description>
+        The decision rule used by the NavigationHandler to
+        determine which view must be displayed after the
+        current view, greeting.jsp is processed.
+    </description>
+    <from-view-id>/greeting.jsp</from-view-id>
+    <navigation-case>
+        <description>
+            Indicates to the NavigationHandler that the response.jsp
+            view must be displayed if the Action referenced by a 
+            UICommand component on the greeting.jsp view returns 
+            the outcome "success".
+        </description>
+      <from-outcome>success</from-outcome>
+      <to-view-id>/response.jsp</to-view-id>
+    </navigation-case>
+  </navigation-rule>
+
+  <navigation-rule>
+   <description>
+        The decision rules used by the NavigationHandler to
+        determine which view must be displayed after the
+        current view, response.jsp is processed.
+    </description>
+    <from-view-id>/response.jsp</from-view-id>
+    <navigation-case>
+        <description>
+            Indicates to the NavigationHandler that the greeting.jsp
+            view must be displayed if the Action referenced by a 
+            UICommand component on the response.jsp view returns 
+            the outcome "success".
+        </description>
+        <from-outcome>success</from-outcome>
+      <to-view-id>/greeting.jsp</to-view-id>
+    </navigation-case>
+  </navigation-rule>
+
+  <managed-bean>
+    <description>
+      The "backing file" bean that backs up the guessNumber webapp
+    </description>
+    <managed-bean-name>UserNumberBean</managed-bean-name>
+    <managed-bean-class>guessNumber.UserNumberBean</managed-bean-class>
+    <managed-bean-scope>session</managed-bean-scope>
+    <managed-property>
+      <property-name>minimum</property-name>
+      <property-class>int</property-class>
+      <value>0</value>
+    </managed-property>
+    <managed-property>
+      <property-name>maximum</property-name>
+      <property-class>int</property-class>
+      <value>10</value>
+    </managed-property>
+  </managed-bean>
+
+</faces-config>

Modified: 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/Backing.java
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/Backing.java
     (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/WEB-INF/src/faces/facesSmoke/Backing.java
     Fri Aug 13 08:58:42 2004
@@ -18,7 +18,7 @@
  */
 package faces.facesSmoke; 
 
-import com.bea.wlw.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.PageFlowController;
 import javax.faces.context.FacesContext;
 import javax.faces.event.ActionEvent;
 

Modified: incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/WEB-INF/web.xml
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/WEB-INF/web.xml       
(original)
+++ incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/WEB-INF/web.xml       
Fri Aug 13 08:58:42 2004
@@ -11,24 +11,27 @@
        <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>
+        <param-name>com.sun.faces.validateXml</param-name>
+        <param-value>true</param-value>
         <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>
+        <param-name>com.sun.faces.verifyObjects</param-name>
+        <param-value>true</param-value>
         <description>
             Set this flag to true if you want the JavaServer Faces
             Reference Implementation to verify that all of the application
@@ -36,10 +39,7 @@
             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>
@@ -47,7 +47,7 @@
     
<filter-class>org.apache.beehive.netui.tools.testrecorder.server.TestRecorderFilter</filter-class>
       <init-param>
           <param-name>webapp</param-name>
-          <param-value>coreWeb</param-value>
+          <param-value>jsfWeb</param-value>
       </init-param>
   </filter>
 
@@ -56,21 +56,22 @@
     
<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>
@@ -150,13 +151,11 @@
   </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>
@@ -169,11 +168,11 @@
        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>

Added: incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/dataStructure.jspf
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/dataStructure.jspf    
Fri Aug 13 08:58:42 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/trunk/netui/test/webapps/jsf/jsfWeb/error.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/error.jsp     Fri Aug 
13 08:58:42 2004
@@ -0,0 +1,18 @@
+<!--Generated by Weblogic Workshop-->
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib uri="netui-tags-databinding.tld" prefix="netui-data"%>
+<%@ taglib uri="netui-tags-html.tld" prefix="netui"%>
+<%@ taglib uri="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>

Modified: incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/faces.jsp
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/faces.jsp     
(original)
+++ incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/faces.jsp     Fri Aug 
13 08:58:42 2004
@@ -6,35 +6,35 @@
 <%
     TestDefinitions testDefs = 
TestRecorderFilter.instance().getTestDefinitions();
     Info[] _testList = {
-       new Info("FacesSmokeAnchors", 
"/coreWeb/faces/facesSmoke/Controller.jpf",
+       new Info("FacesSmokeAnchors", "/jsfWeb/faces/facesSmoke/Controller.jpf",
         "Smoke test of the JSF Anchor.",
         "JSF, commandLink"
                 ),
-       new Info("FacesSmokeBundle", "/coreWeb/faces/facesSmoke/Controller.jpf",
+       new Info("FacesSmokeBundle", "/jsfWeb/faces/facesSmoke/Controller.jpf",
         "Smoke test of the JSF Bundle.",
         "JSF, bundle"
                 ),
-       new Info("FacesSmokeConversions", 
"/coreWeb/faces/facesSmoke/Controller.jpf",
+       new Info("FacesSmokeConversions", 
"/jsfWeb/faces/facesSmoke/Controller.jpf",
         "Smoke test of the JSF Conversions.",
         "JSF, conversions"
                 ),
-       new Info("FacesSmokeDataTable", 
"/coreWeb/faces/facesSmoke/Controller.jpf",
+       new Info("FacesSmokeDataTable", 
"/jsfWeb/faces/facesSmoke/Controller.jpf",
         "Smoke test of the JSF DataTable.",
         "JSF, DataTable"
                 ),
-       new Info("FacesSmokeFormOne", 
"/coreWeb/faces/facesSmoke/Controller.jpf",
+       new Info("FacesSmokeFormOne", "/jsfWeb/faces/facesSmoke/Controller.jpf",
         "Smoke test of the JSF Form and controls.",
         "JSF, Form"
                 ),
-       new Info("FacesSmokeFormTwo", 
"/coreWeb/faces/facesSmoke/Controller.jpf",
+       new Info("FacesSmokeFormTwo", "/jsfWeb/faces/facesSmoke/Controller.jpf",
         "Smoke test of the JSF Form and controls.",
         "JSF, Form"
                 ),
-       new Info("FacesSmokeImage", "/coreWeb/faces/facesSmoke/Controller.jpf",
+       new Info("FacesSmokeImage", "/jsfWeb/faces/facesSmoke/Controller.jpf",
         "Smoke test of the JSF Image.",
         "JSF, GraphicImage"
                 ),
-       new Info("FacesSmokePanel", "/coreWeb/faces/facesSmoke/Controller.jpf",
+       new Info("FacesSmokePanel", "/jsfWeb/faces/facesSmoke/Controller.jpf",
         "Smoke test of the JSF Panel.",
         "JSF, PanelGrid"
                 ),

Modified: 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Controller.jpf
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Controller.jpf
       (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/Controller.jpf
       Fri Aug 13 08:58:42 2004
@@ -13,316 +13,7 @@
 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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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>
- * ::
- */
[EMAIL PROTECTED](
-    )
[EMAIL PROTECTED](
-    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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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:[EMAIL PROTECTED]: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>"
-    })
[EMAIL PROTECTED]
 public class Controller extends PageFlowController
 {
     private Date _date;

Modified: 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/index.jsp
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/index.jsp
    (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/faces/facesSmoke/index.jsp
    Fri Aug 13 08:58:42 2004
@@ -1,6 +1,7 @@
 <%@ 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>
@@ -44,4 +45,4 @@
     </body>
 </html>
 
-  
\ No newline at end of file
+  

Copied: incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/index/index.jsp 
(from rev 36304, 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/index.jsp)
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/index.jsp      
(original)
+++ incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/index/index.jsp       
Fri Aug 13 08:58:42 2004
@@ -54,12 +54,12 @@
          <netui-data:repeaterHeader><table border='1px' 
cellspacing='0'></netui-data:repeaterHeader>
          <netui-data:repeaterItem>
              <tr class="${pageFlow.rowStyle}">
-             <td class="nameColumn"><netui:anchor 
href="/coreWeb/testRecorder?mode=displayLink">${container.item.name}
+             <td class="nameColumn"><netui:anchor 
href="/jsfWeb/testRecorder?mode=displayLink">${container.item.name}
                  <netui:parameter name="file" value="${container.item.name}"/>
                  </netui:anchor></td>
              <td class="diffColumn">
                  <c:if test="${container.item.diff == true}">
-                 <netui:anchor href="/coreWeb/testRecorder?mode=diff">Diff
+                 <netui:anchor href="/jsfWeb/testRecorder?mode=diff">Diff
                      <netui:parameter name="file" 
value="${container.item.name}"/>
                  </netui:anchor>
                  </c:if>
@@ -67,7 +67,7 @@
              </td>
               <td class="descrColumn">${container.item.description}
               </td>
-              <td class="detailColumn"><netui:anchor 
href="/coreWeb/testRecorder?mode=details">Details
+              <td class="detailColumn"><netui:anchor 
href="/jsfWeb/testRecorder?mode=details">Details
                  <netui:parameter name="file" value="${container.item.name}"/>
                  </netui:anchor></td>
             </tr>

Added: 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/JpfFacesController.jpf
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/JpfFacesController.jpf
       Fri Aug 13 08:58:42 2004
@@ -0,0 +1,54 @@
+package jpfFaces;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
[EMAIL PROTECTED]
+public class JpfFacesController extends PageFlowController
+{
+    public static class BarForm extends FormData
+    {
+        private String _bar;
+
+        public void setBar( String bar )
+        {
+            _bar = bar;
+        }
+
+        public String getBar()
+        {
+            return _bar;
+        }
+    }
+    
+    @Jpf.Action([EMAIL PROTECTED](name="page1", path="page1.faces"))
+    public Forward begin()
+    {
+        return new Forward( "page1" );
+    }
+
+    @Jpf.Action([EMAIL PROTECTED](name="page1", path="page1.faces"))
+    public Forward go1()
+    {
+        return new Forward( "page1" );
+    }
+
+    @Jpf.Action([EMAIL PROTECTED](name="page2", path="page2.faces"))
+    public Forward go2( BarForm form )
+    {
+        getRequest().setAttribute( "message", "got form; bar was '" + 
form.getBar() + "'" );
+        return new Forward( "page2" );
+    }
+
+    @Jpf.Action([EMAIL PROTECTED](name="page3", path="page3.faces"))
+    public Forward go3()
+    {
+        return new Forward( "page3" );
+    }
+
+    @Jpf.Action([EMAIL PROTECTED](name="page4", path="page4.faces"))
+    public Forward go4()
+    {
+        return new Forward( "page4" );
+    }
+}

Added: incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page1.jsfb
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page1.jsfb   
Fri Aug 13 08:58:42 2004
@@ -0,0 +1,43 @@
+package jpfFaces;
+
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+
[EMAIL PROTECTED]
+public class page1
+{
+    public JpfFacesController.BarForm bar = new JpfFacesController.BarForm();
+    private String _foo;
+
+    public void setFoo( String foo )
+    {
+        _foo = foo;
+    }
+
+    public String getFoo()
+    {
+        return _foo;
+    }
+
+    @Jpf.CommandHandler(
+        raiseActions = {
+            @Jpf.RaiseAction( action="go2", outputFormBean="bar" )
+        }
+    )
+    public String commandHandler2()
+    {
+        if ( "stay".equals( _foo ) ) return null;
+        bar.setBar( _foo );
+        return "go2";
+    }
+
+    @Jpf.CommandHandler(
+        raiseActions = {
+            @Jpf.RaiseAction( action="go3" )
+        }
+    )
+    public String commandHandler3()
+    {
+        return "go3";
+    }
+}

Added: incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page1.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page1.jsp    
Fri Aug 13 08:58:42 2004
@@ -0,0 +1,20 @@
+<%@ taglib uri="http://java.sun.com/jsf/html"; prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core"; prefix="f" %>
+
+<html>
+    <head> <title>Page Flow / JSF</title> </head>
+    <body bgcolor="white">
+    <h3>Page Flow / JSF: page 1</h3>
+    <f:view>
+        <h:form id="go2form">
+               <h:inputText id="foo" value="#{backing.foo}"/>
+            <br/>
+            <h:commandLink id="go2button" action="#{backing.commandHandler2}" 
value="go to page2 (pass a form)" />
+                - type "stay" to make the CommandHandler return null
+            <br/>
+            <h:commandLink id="go3button" action="#{backing.commandHandler3}" 
value="go to page3 (no form)" />
+            <br/>
+            <h:commandLink id="go4button" action="go4" value="go to page4 (no 
CommandHandler)" />
+        </h:form>
+    </f:view>
+</HTML>  

Added: incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page2.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page2.jsp    
Fri Aug 13 08:58:42 2004
@@ -0,0 +1,16 @@
+<%@ taglib uri="http://java.sun.com/jsf/html"; prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core"; prefix="f" %>
+
+<html>
+    <head> <title>Page Flow / JSF</title> </head>
+    <body bgcolor="white">
+    <h3>Page Flow / JSF: page 2</h3>
+    <f:view>
+        Message from page flow: <i><h:outputText id="msg" 
value="#{requestScope.message}"/></i>
+        <br/>
+
+        <h:form id="go1form" >
+            <h:commandButton id="go1button" action="go1" value="back to page 
1" />
+        </h:form>
+    </f:view>
+</HTML>  

Added: incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page3.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page3.jsp    
Fri Aug 13 08:58:42 2004
@@ -0,0 +1,13 @@
+<%@ taglib uri="http://java.sun.com/jsf/html"; prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core"; prefix="f" %>
+
+<html>
+    <head> <title>Page Flow / JSF</title> </head>
+    <body bgcolor="white">
+    <h3>Page Flow / JSF: page 3</h3>
+    <f:view>
+        <h:form id="go1form" >
+            <h:commandButton id="go1button" action="go1" value="back to page 
1" />
+        </h:form>
+    </f:view>
+</HTML>  

Added: incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page4.jsp
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/jpfFaces/page4.jsp    
Fri Aug 13 08:58:42 2004
@@ -0,0 +1,13 @@
+<%@ taglib uri="http://java.sun.com/jsf/html"; prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core"; prefix="f" %>
+
+<html>
+    <head> <title>Page Flow / JSF</title> </head>
+    <body bgcolor="white">
+    <h3>Page Flow / JSF: page 4</h3>
+    <f:view>
+        <h:form id="go1form" >
+            <h:commandButton id="go1button" action="go1" value="back to page 
1" />
+        </h:form>
+    </f:view>
+</HTML>  

Added: incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/page.jspf
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/netui/test/webapps/jsf/jsfWeb/page.jspf     Fri Aug 
13 08:58:42 2004
@@ -0,0 +1,95 @@
+<%@ page 
import="org.apache.beehive.netui.tools.testrecorder.shared.config.TestDefinition,
+                 java.net.URL,
+                 java.io.File"%>
+<html>
+<head>
+  <title>NetUI V2 BVT - <%= _title %></title>
+  <link rel="stylesheet" href="<%= 
((HttpServletRequest)pageContext.getRequest()).getContextPath() 
%>/site/style.css">
+</head>
+<body topmargin="0" leftmargin="0" marginwidth="10" marginheight="10">
+<table class="header" width="100%">
+<tr>
+<td width="200" style="padding:4,0,0,4">
+  <img src="<%= 
((HttpServletRequest)pageContext.getRequest()).getContextPath() 
%>/images/godzilla.gif" height="66" width="48"/>
+</td><td valign="top">
+<h1 class="title">NetUI Tests - <%= _title %></h1>
+</td></tr>
+<tr><td colspan="2">
+<hr />
+</td></tr>
+<td valign="top">
+<b>Core Tests<b><br>
+<a href="/coreWeb/index.jsp">Core PageFlow Tests &#0150; v1</a><br>
+<a href="/coreWeb/coreTests.jsp">Core PageFlow Tests &#0150; v2</a><br>
+<a href="/coreWeb/bvtTests2.jsp">Bug Verification Tests &#0150; cr</a><br>
+<a href="/coreWeb/bvtTests.jsp">Bug Verification Tests &#0150; b</a><br>
+<a href="/coreWeb/databindingTests.jsp">Databinding &#0150; General 
Tests</a></br>
+<a href="/coreWeb/gridTests.jsp">DataBinding &#0150; Grid Tests</a><br>
+<a href="/coreWeb/errorTests.jsp">Error Tests</a><br>
+<a href="/coreWeb/mockPortalTests.jsp">Mock Portal Tests</a></br>
+<a href="/coreWeb/tagTests.jsp">Tag &#0150; General Tests</a><br>
+<a href="/coreWeb/treeTests.jsp">Tag &#0150; Tree Tests</a><br>
+<a href="/coreWeb/templateTests.jsp">Tag &#0150; Template Tests</a></br>
+<a href="xhtml./coreWeb/jsp">Tag &#0150; XHTML Tests</a><br>
+<hr>
+<b>Optional Tests</b></br>
+<a href="faces.jsp">Faces Tests</a><br>
+<hr />
+<a href="#Bottom">Goto Bottom</a></br>
+</td><td valign='top'>
+<span  style="background-color:white">
+<!-- Errors Table -->
+
+<table border="1" width="100%" cellspacing="0">
+<tr><th>DRT</th>
+    <th>Details</th>
+    <th>Diff</th>
+    <th>Description</th>
+    <th>Coverage</th>
+</tr>
+<%
+    for (int i=0;i<_testList.length;i++) {
+%>
+<tr>
+  <td width="100pt"><a href="<%= _testList[i]._href %>"><%= _testList[i]._test 
%></a></td>
+  <td width="60pt" align="center"><a href="<%= 
((HttpServletRequest)pageContext.getRequest()).getContextPath() 
%>/testRecorder?mode=details&file=<%= _testList[i]._test %>">Details</a></td>
+  <td width="100pt" align="center">
+<%
+    TestDefinition def = testDefs.getTest( _testList[i]._test );
+    if ( def == null ) {
+%>
+       <strong>Not Found: <%= _testList[i]._test %></strong>
+<%
+    }
+    else {
+        File file = new File( def.getResultDiffFilePath() );
+        if ( file.exists() ) {
+    %>
+           <a href="/netuiDRT/testRecorder?mode=diff&file=<%= def.getName() 
%>">Diff</a>
+    <%
+        }
+        else {
+    %>
+           &nbsp;
+    <%
+        }
+    }
+    %>
+  </td>
+  <td width="400pt"><%= _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>

Modified: 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/config/testRecorder-config.xml
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/config/testRecorder-config.xml
  (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/config/testRecorder-config.xml
  Fri Aug 13 08:58:42 2004
@@ -6,8 +6,9 @@
         <suffix>jspx</suffix>
         <suffix>do</suffix>
         <suffix>jpf</suffix>
+        <suffix>faces</suffix>
         <suffix></suffix>
     </suffixList>
     <servletURI>testRecorder</servletURI>
     <baseDirectory>@BASE_DIR@</baseDirectory>
-</config>
\ No newline at end of file
+</config>

Modified: 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeAnchors.xml
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeAnchors.xml
     (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeAnchors.xml
     Fri Aug 13 08:58:42 2004
@@ -17,7 +17,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <uri>/jsfWeb/faces/facesSmoke/Controller.jpf</uri>
       <method>GET</method>
 
       <parameters>
@@ -93,7 +93,7 @@
     </head>
     <body style="border: 1px dotted;">
         
-            <form id="pageForm" method="post" 
action="/coreWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
+            <form id="pageForm" method="post" 
action="/jsfWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
 
             
                 
@@ -169,6 +169,7 @@
 </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+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"
 />
+
  <input type="hidden" name="pageForm" value="pageForm" /></form>
         
     </body>
@@ -190,7 +191,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/goAnchors.do</uri>
+      <uri>/jsfWeb/faces/facesSmoke/goAnchors.do</uri>
       <method>GET</method>
 
       <parameters>
@@ -266,7 +267,7 @@
     </head>
     <body>
         
-              <form id="formBase" method="post" 
action="/coreWeb/faces/facesSmoke/Anchors.faces" 
enctype="application/x-www-form-urlencoded">
+              <form id="formBase" method="post" 
action="/jsfWeb/faces/facesSmoke/Anchors.faces" 
enctype="application/x-www-form-urlencoded">
 
                 
                     
@@ -376,4 +377,4 @@
   <testCount>2</testCount>
   <passedCount>0</passedCount>
   <failedCount>2</failedCount>
-</recorderSession>
\ No newline at end of file
+</recorderSession>

Modified: 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeBundle.xml
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeBundle.xml
      (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeBundle.xml
      Fri Aug 13 08:58:42 2004
@@ -17,7 +17,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <uri>/jsfWeb/faces/facesSmoke/Controller.jpf</uri>
       <method>GET</method>
 
       <parameters>
@@ -93,7 +93,7 @@
     </head>
     <body style="border: 1px dotted;">
         
-            <form id="pageForm" method="post" 
action="/coreWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
+            <form id="pageForm" method="post" 
action="/jsfWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
 
             
                 
@@ -190,7 +190,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/goBundle.do</uri>
+      <uri>/jsfWeb/faces/facesSmoke/goBundle.do</uri>
       <method>GET</method>
 
       <parameters>
@@ -267,7 +267,7 @@
     <body>
         
              
-              <form id="_id0" method="post" 
action="/coreWeb/faces/facesSmoke/Bundle.faces" 
enctype="application/x-www-form-urlencoded">
+              <form id="_id0" method="post" 
action="/jsfWeb/faces/facesSmoke/Bundle.faces" 
enctype="application/x-www-form-urlencoded">
 
                 
                     
@@ -326,4 +326,4 @@
   <testCount>2</testCount>
   <passedCount>0</passedCount>
   <failedCount>2</failedCount>
-</recorderSession>
\ No newline at end of file
+</recorderSession>

Modified: 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeConversions.xml
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeConversions.xml
 (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeConversions.xml
 Fri Aug 13 08:58:42 2004
@@ -17,7 +17,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <uri>/jsfWeb/faces/facesSmoke/Controller.jpf</uri>
       <method>GET</method>
 
       <parameters>
@@ -93,7 +93,7 @@
     </head>
     <body style="border: 1px dotted;">
         
-            <form id="pageForm" method="post" 
action="/coreWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
+            <form id="pageForm" method="post" 
action="/jsfWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
 
             
                 
@@ -190,7 +190,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/goConvert.do</uri>
+      <uri>/jsfWeb/faces/facesSmoke/goConvert.do</uri>
       <method>GET</method>
 
       <parameters>
@@ -266,7 +266,7 @@
     </head>
     <body>
         
-              <form id="_id0" method="post" 
action="/coreWeb/faces/facesSmoke/Convert.faces" 
enctype="application/x-www-form-urlencoded">
+              <form id="_id0" method="post" 
action="/jsfWeb/faces/facesSmoke/Convert.faces" 
enctype="application/x-www-form-urlencoded">
 
                 
                     
@@ -341,4 +341,4 @@
   <testCount>2</testCount>
   <passedCount>0</passedCount>
   <failedCount>2</failedCount>
-</recorderSession>
\ No newline at end of file
+</recorderSession>

Modified: 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeDataTable.xml
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeDataTable.xml
   (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeDataTable.xml
   Fri Aug 13 08:58:42 2004
@@ -17,7 +17,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <uri>/jsfWeb/faces/facesSmoke/Controller.jpf</uri>
       <method>GET</method>
 
       <parameters>
@@ -93,7 +93,7 @@
     </head>
     <body style="border: 1px dotted;">
         
-            <form id="pageForm" method="post" 
action="/coreWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
+            <form id="pageForm" method="post" 
action="/jsfWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
 
             
                 
@@ -190,7 +190,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/goDataTable.do</uri>
+      <uri>/jsfWeb/faces/facesSmoke/goDataTable.do</uri>
       <method>GET</method>
 
       <parameters>
@@ -266,7 +266,7 @@
     </head>
     <body>
         
-          <form id="_id0" method="post" 
action="/coreWeb/faces/facesSmoke/DataTable.faces" 
enctype="application/x-www-form-urlencoded">
+          <form id="_id0" method="post" 
action="/jsfWeb/faces/facesSmoke/DataTable.faces" 
enctype="application/x-www-form-urlencoded">
 
                 
                     
@@ -367,4 +367,4 @@
   <testCount>2</testCount>
   <passedCount>0</passedCount>
   <failedCount>2</failedCount>
-</recorderSession>
\ No newline at end of file
+</recorderSession>

Modified: 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormOne.xml
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormOne.xml
     (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormOne.xml
     Fri Aug 13 08:58:42 2004
@@ -17,7 +17,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <uri>/jsfWeb/faces/facesSmoke/Controller.jpf</uri>
       <method>GET</method>
 
       <parameters>
@@ -93,7 +93,7 @@
     </head>
     <body style="border: 1px dotted;">
         
-            <form id="pageForm" method="post" 
action="/coreWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
+            <form id="pageForm" method="post" 
action="/jsfWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
 
             
                 
@@ -190,7 +190,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/goFormOne.do</uri>
+      <uri>/jsfWeb/faces/facesSmoke/goFormOne.do</uri>
       <method>GET</method>
 
       <parameters>
@@ -266,7 +266,7 @@
     </head>
     <body>
         
-              <form id="_id0" method="post" 
action="/coreWeb/faces/facesSmoke/FormOne.faces" 
enctype="application/x-www-form-urlencoded">
+              <form id="_id0" method="post" 
action="/jsfWeb/faces/facesSmoke/FormOne.faces" 
enctype="application/x-www-form-urlencoded">
 
                 
                     
@@ -364,4 +364,4 @@
   <testCount>2</testCount>
   <passedCount>0</passedCount>
   <failedCount>2</failedCount>
-</recorderSession>
\ No newline at end of file
+</recorderSession>

Modified: 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormTwo.xml
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormTwo.xml
     (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeFormTwo.xml
     Fri Aug 13 08:58:42 2004
@@ -17,7 +17,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <uri>/jsfWeb/faces/facesSmoke/Controller.jpf</uri>
       <method>GET</method>
 
       <parameters>
@@ -93,7 +93,7 @@
     </head>
     <body style="border: 1px dotted;">
         
-            <form id="pageForm" method="post" 
action="/coreWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
+            <form id="pageForm" method="post" 
action="/jsfWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
 
             
                 
@@ -190,7 +190,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/goFormTwo.do</uri>
+      <uri>/jsfWeb/faces/facesSmoke/goFormTwo.do</uri>
       <method>GET</method>
 
       <parameters>
@@ -266,7 +266,7 @@
     </head>
     <body>
         
-              <form id="_id0" method="post" 
action="/coreWeb/faces/facesSmoke/FormTwo.faces" 
enctype="application/x-www-form-urlencoded">
+              <form id="_id0" method="post" 
action="/jsfWeb/faces/facesSmoke/FormTwo.faces" 
enctype="application/x-www-form-urlencoded">
 
                 
                     
@@ -433,4 +433,4 @@
   <testCount>2</testCount>
   <passedCount>0</passedCount>
   <failedCount>2</failedCount>
-</recorderSession>
\ No newline at end of file
+</recorderSession>

Modified: 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeImage.xml
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeImage.xml
       (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokeImage.xml
       Fri Aug 13 08:58:42 2004
@@ -17,7 +17,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <uri>/jsfWeb/faces/facesSmoke/Controller.jpf</uri>
       <method>GET</method>
 
       <parameters>
@@ -93,7 +93,7 @@
     </head>
     <body style="border: 1px dotted;">
         
-            <form id="pageForm" method="post" 
action="/coreWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
+            <form id="pageForm" method="post" 
action="/jsfWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
 
             
                 
@@ -190,7 +190,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/goImages.do</uri>
+      <uri>/jsfWeb/faces/facesSmoke/goImages.do</uri>
       <method>GET</method>
 
       <parameters>
@@ -266,7 +266,7 @@
     </head>
     <body>
         
-              <form id="_id0" method="post" 
action="/coreWeb/faces/facesSmoke/Image.faces" 
enctype="application/x-www-form-urlencoded">
+              <form id="_id0" method="post" 
action="/jsfWeb/faces/facesSmoke/Image.faces" 
enctype="application/x-www-form-urlencoded">
 
                 
                     
@@ -319,4 +319,4 @@
   <testCount>2</testCount>
   <passedCount>0</passedCount>
   <failedCount>2</failedCount>
-</recorderSession>
\ No newline at end of file
+</recorderSession>

Modified: 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokePanel.xml
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokePanel.xml
       (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/jsf/testRecorder/tests/FacesSmokePanel.xml
       Fri Aug 13 08:58:42 2004
@@ -17,7 +17,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/Controller.jpf</uri>
+      <uri>/jsfWeb/faces/facesSmoke/Controller.jpf</uri>
       <method>GET</method>
 
       <parameters>
@@ -93,7 +93,7 @@
     </head>
     <body style="border: 1px dotted;">
         
-            <form id="pageForm" method="post" 
action="/coreWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
+            <form id="pageForm" method="post" 
action="/jsfWeb/faces/facesSmoke/index.faces" 
enctype="application/x-www-form-urlencoded">
 
             
                 
@@ -190,7 +190,7 @@
       <protocolVersion>1.1</protocolVersion>
       <host>localhost</host>
       <port>7001</port>
-      <uri>/coreWeb/faces/facesSmoke/goPanels.do</uri>
+      <uri>/jsfWeb/faces/facesSmoke/goPanels.do</uri>
       <method>GET</method>
 
       <parameters>
@@ -266,7 +266,7 @@
     </head>
     <body>
         
-              <form id="_id0" method="post" 
action="/coreWeb/faces/facesSmoke/Panels.faces" 
enctype="application/x-www-form-urlencoded">
+              <form id="_id0" method="post" 
action="/jsfWeb/faces/facesSmoke/Panels.faces" 
enctype="application/x-www-form-urlencoded">
 
                 
                     
@@ -418,4 +418,4 @@
   <testCount>2</testCount>
   <passedCount>0</passedCount>
   <failedCount>2</failedCount>
-</recorderSession>
\ No newline at end of file
+</recorderSession>

Modified: incubator/beehive/trunk/test/ant/buildWebapp.xml
==============================================================================
--- incubator/beehive/trunk/test/ant/buildWebapp.xml    (original)
+++ incubator/beehive/trunk/test/ant/buildWebapp.xml    Fri Aug 13 08:58:42 2004
@@ -99,7 +99,7 @@
         <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">
+             classpathref="pageflow.build.classpath" 
srcExtensions="*.app,*.jpf,*.jsfb">
         </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"/>

Reply via email to