You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by do...@apache.org on 2004/07/28 04:52:45 UTC

svn commit: rev 30810 - in incubator/beehive/trunk/netui: src/tags-html/org/apache/beehive/netui/tags src/tags-html/org/apache/beehive/netui/tags/html src/tags-html/org/apache/beehive/netui/tags/rendering src/tags-html/org/apache/beehive/netui/tags/tree src/util/org/apache/beehive/netui/util test/webapps/drt/coreWeb/index test/webapps/drt/coreWeb/template/divPanelTree test/webapps/drt/testRecorder/tests

Author: dolander
Date: Tue Jul 27 19:52:44 2004
New Revision: 30810

Modified:
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractBaseTag.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlCore.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Anchor.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Hidden.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Image.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageAnchor.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractAttributeState.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java
   incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/index.jsp
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/style.css
   incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/template/divPanelTree/Controller.jpf
   incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/AnchorActions.xml
   incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ImageAnchorActions.xml
Log:
This is the beginning of a set of runtime errors that will be reported when EL binds to null values and we provide the
default.  For certain attributes we will report a runtime error.

In this checkin, the Anchor has been fixed to require a value for Action, ClientAction and LinkName. 
In addition, tagId is now required.



Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractBaseTag.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractBaseTag.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractBaseTag.java	Tue Jul 27 19:52:44 2004
@@ -28,7 +28,6 @@
 import org.apache.beehive.netui.tags.naming.FormDataNameInterceptor;
 import org.apache.beehive.netui.tags.naming.IndexedNameInterceptor;
 import org.apache.beehive.netui.tags.naming.NameInterceptor;
-import org.apache.beehive.netui.tags.rendering.AbstractAttributeState;
 import org.apache.beehive.netui.util.Bundle;
 import org.apache.beehive.netui.util.logging.Logger;
 import org.apache.struts.Globals;
@@ -573,9 +572,42 @@
         return URLRewriterService.rewriteName(pageContext.getServletContext(), pageContext.getRequest(), name);
     }
 
-
-    ///////////////////////////  Generic Attribute Rendering Support ////////////////////////////
     ///////////////////////////  Generic Error Reporting Support  ////////////////////////////
+
+    /**
+     * Report an error if the value of <code>attrValue</code> is equal to the empty string, otherwise return
+     * that value.  If <code>attrValue</code> is equal to the empty string, an error is registered and
+     * null is returned.
+     * @param attrValue The value to be checked for the empty string
+     * @param attrName The name of the attribute
+     * @return  either the attrValue if it is not the empty string or null
+     * @throws JspException A JspException will be thrown if inline error reporting is turned off.
+     */
+    protected final String setRequiredValueAttribute(String attrValue,String attrName)
+        throws JspException
+    {
+        assert(attrValue != null) : "parameter 'attrValue' must not be null";
+        assert(attrName != null) : "parameter 'attrName' must not be null";
+
+        if ("".equals(attrValue)) {
+            String s = Bundle.getString("Tags_AttrValueRequired", new Object[] {attrName});
+            registerTagError(s, null);
+            return null;
+        }
+        return attrValue;
+    }
+
+    /**
+     * Filter out the empty string value and return either the value or null.  When the value of
+     * <code>attrValue</code> is equal to the empty string this will return null, otherwise it will
+     * return the value of <code>attrValue</code>.
+     * @param attrValue This is the value we will check for the empty string.
+     * @return either the value of attrValue or null
+     */
+    protected final String setNonEmptyValueAttribute(String attrValue)
+    {
+        return ("".equals(attrValue)) ? null : attrValue;
+    }
 
     /**
      * This will report an error from a tag.  The error will

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlCore.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlCore.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/IHtmlCore.java	Tue Jul 27 19:52:44 2004
@@ -18,6 +18,8 @@
  */
 package org.apache.beehive.netui.tags;
 
+import javax.servlet.jsp.JspException;
+
 
 /**
  * This interface defines the HTML 4.0 core attributes.  The following properties represent the core attributes:
@@ -40,7 +42,7 @@
      * Set the ID of the tag.
      * @param tagId - the tagId.
      */
-    void setTagId(String tagId);
+    void setTagId(String tagId); 
 
     /**
      * Returns the Nodes title.

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Anchor.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Anchor.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Anchor.java	Tue Jul 27 19:52:44 2004
@@ -164,6 +164,8 @@
 public class Anchor extends HtmlBaseTag
         implements URLParams
 {
+    private static final String REQUIRED_ATTR = "href, action, linkName, clientAction";
+
     /**
      * NOTES: It looks like the location can only be used with href.  We need to make sure that there
      * is an error if this is not true.  Location cannot be used at the moment with a target of an
@@ -224,7 +226,7 @@
 
     /**
      * Set the name of the action for the Anchor.
-     * @param action - the name of the action to set for the Anchor.
+     * @param action - the name of the action to set for the Anchor.  Action requires a value.
      * @jsptagref.attributedescription
      * The action method to invoke.  The action method must be in the Controller file 
      * of the Page Flow directory. 
@@ -237,8 +239,9 @@
      * @netui.tldx:attribute reftype="netui-action-url" category="general"
      */
     public void setAction(String action)
+        throws JspException
     {
-        _action = action;
+        _action = setRequiredValueAttribute(action,"action");
     }
 
     /**
@@ -311,7 +314,7 @@
     }
 
     /**
-     * Sets the href of the Anchor.
+     * Sets the href of the Anchor. This attribute will accept the empty String as a legal value.
      * @param href - the hyperlink URI for the Anchor.
      * @jsptagref.attributedescription
      * The URL to go to. 
@@ -336,8 +339,9 @@
      * @netui:attribute required="false" rtexprvalue="true"
      */
     public void setClientAction(String action)
+        throws JspException
     {
-        _clientAction = action;
+        _clientAction = setRequiredValueAttribute(action,"clientAction");
     }
 
     /**
@@ -354,8 +358,9 @@
      * @netui.tldx:attribute
      */
     public void setLinkName(String linkName)
+        throws JspException
     {
-        _linkName = linkName.trim();
+        _linkName = setRequiredValueAttribute(linkName,"linkName");
     }
 
     /**
@@ -373,7 +378,7 @@
      */
     public void setLocation(String location)
     {
-        _location = location;
+        _location = setNonEmptyValueAttribute(location);
     }
 
     /**
@@ -518,6 +523,13 @@
      */
     public int doEndTag() throws JspException
     {
+        // report errors that may have occurred when the required attributes are being set
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
         // build the anchor into the results
         StringBuilder results = new StringBuilder(128);
         StringBuilder script = new StringBuilder(128);
@@ -597,9 +609,9 @@
         // if we have not specified a destination or we've specified too many
         // then we need to report an error.
         if (have == 0 || have > 1) {
-            String s = Bundle.getString("Tags_Anchor_InvalidAnchorURI",
-                    new Object[]{"href, action, linkName, clientAction"});
+            String s = Bundle.getString("Tags_Anchor_InvalidAnchorURI", new Object[] {REQUIRED_ATTR});
             registerTagError(s, null);
+            return false;
         }
 
         if (_linkName != null) {
@@ -805,17 +817,14 @@
     {
         String url = null;
         try {
-            url = PageflowTagUtils.computeURL(pageContext, null, href,
-                    null, null, _params, location, true);
+            url = PageflowTagUtils.computeURL(pageContext, null, href, null, null, _params, location, true);
         }
         catch (MalformedURLException e) {
+            // report the error...
             logger.error(Bundle.getString("Tags_MalformedURLException"));
             String s = null;
             s = Bundle.getString("Tags_Anchor_URLException",
-                    new Object[]{e.getMessage()});
-
-            // report the error.  If this returns a value then we throw an
-            // exception
+                    new Object[] {e.getMessage()});
             registerTagError(s, e);
         }
         return url;

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Hidden.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Hidden.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Hidden.java	Tue Jul 27 19:52:44 2004
@@ -176,6 +176,7 @@
      */
     public void setTagId(String tagId)
     {
+        // @todo: this is in the base class, should we remove it?
         _tagId = tagId;
     }
 

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Image.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Image.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Image.java	Tue Jul 27 19:52:44 2004
@@ -168,7 +168,7 @@
     public void setAlt(String alt)
     {
         AbstractHtmlState tsh = getState();
-        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt);
+        tsh.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt, true);
     }
 
     /**

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageAnchor.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageAnchor.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageAnchor.java	Tue Jul 27 19:52:44 2004
@@ -496,6 +496,13 @@
      */
     public int doEndTag() throws JspException
     {
+        // report errors that may have occurred when the required attributes are being set
+        if (hasErrors()) {
+            reportErrors();
+            localRelease();
+            return EVAL_PAGE;
+        }
+
         ServletRequest req = pageContext.getRequest();
 
         // build the anchor into the results
@@ -505,15 +512,6 @@
         // render the anchor tag
         TagRenderingBase trb = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, req);
         if (!createAnchorBeginTag(results, script, trb)) {
-            reportErrors();
-            if (script.length() > 0)
-                write(script.toString());
-            localRelease();
-            return EVAL_PAGE;
-        }
-
-        // if there are errors then return....
-        if (hasErrors()) {
             reportErrors();
             if (script.length() > 0)
                 write(script.toString());

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractAttributeState.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractAttributeState.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractAttributeState.java	Tue Jul 27 19:52:44 2004
@@ -74,19 +74,21 @@
     }
 
     /**
-     * Register a name value part into a named attribute map.  The base type
-     * supports two attribute maps, the first are general attributes and the second are
-     * attributes which may contain expressions.  These are identified by the type definition
-     * <code>ATTR_GENERAL<code>  and <code>ATTR_GENERAL_EXPRESSION</code> respectively.
+     * Register a name/value pair into a named attribute map.  The base type
+     * supports the <code>ATTR_GENERAL<code> named map.  Subclasses may add additional maps
+     * enabling attributes to be treated with different behavior.
      * @param type     an integer key identifying the map.
      * @param attrName the name of the attribute
      * @param value    the value of the attribute
      */
-    public void registerAttribute(int type, String attrName, String value)
+    public void registerAttribute(int type, String attrName, String value, boolean ignoreEmpty)
     {
-
         assert(attrName != null);
-        if (value == null)
+        
+        // If the value is null or the empty string ignore the expression.
+        if (value == null )
+            return;
+        if (ignoreEmpty && "".equals(value))
             return;
 
         Map map = selectMap(type, true);
@@ -97,6 +99,11 @@
             return;
         }
         map.put(attrName, value);
+    }
+
+    public void registerAttribute(int type, String attrName, String value)
+    {
+        registerAttribute(type,attrName,value,true);
     }
 
     /**

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java	Tue Jul 27 19:52:44 2004
@@ -852,7 +852,7 @@
         _imgState.clear();
         _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, WIDTH, "16px");
         _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, BORDER, "0");
-        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, "");
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, "",false);
         for (int i = 0; i < level; i++) {
             int levels = level - i;
             TreeElement parent = node;
@@ -918,7 +918,7 @@
         _imgState.src = img.toString();
         _imgState.style = "vertical-align:middle;";
         _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, BORDER, "0");
-        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, "");
+        _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, "",false);
         imageRenderer.doStartTag(sb, _imgState);
         imageRenderer.doEndTag(sb);
 
@@ -1027,7 +1027,7 @@
             _imgState.src = icon;
             _imgState.style = "vertical-align:middle";
             String alt = Bundle.getString("Tags_TreeAltText", null);
-            _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt);
+            _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt, false);
             _imgState.registerAttribute(AbstractHtmlState.ATTR_GENERAL, BORDER, "0");
 
             // set the inheritted attributes

Modified: incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties
==============================================================================
--- incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties	(original)
+++ incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/netui.properties	Tue Jul 27 19:52:44 2004
@@ -3,6 +3,7 @@
 Tags_Exception=Exception: {0}
 Tags_WriteException=JspException writting to the response.
 Tags_NotURLRewriter={0} is not a URLRewriter.
+Tags_AttrValueRequired=Attribute ''{0}'' is required to have a value.  The value "" is illegal.  This is often cause by binding to an object with a null value.
 Tags_BadAction=Action ''{0}'' is not a valid action.
 Tags_NullBadAction=Action was resolved as "", this is probably the result of an expression bound to a null Object.
 Tags_NullAction=The expression {0} results in a null action.
@@ -78,7 +79,7 @@
 Tags_Image_Page_and_URL=Image tag with both a Page and URL specified, \
 page "{0}", url "{1}"
 Tags_Iteration_Error=Unable to create iterator for attribute <b>optionDataSource</b> of type "<b>{0}</b>"
-Tags_Anchor_URLException=URL Exception: {0}
+Tags_Anchor_URLException=URL Exception calculating the URL: {0}
 Tags_Anchor_ForwardError=URL Exception: {0}.  This may be caused because an ActionMapping cannot be found (the page was not accessed through an Action).
 Tags_Form_URLException=The action ''{0}'' for the Form is malformed: {1}
 Tags_Anchor_InvalidAnchorURI=The Anchor URI is invalid; it must be exactly one of {0}

Modified: 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/drt/coreWeb/index/index.jsp	Tue Jul 27 19:52:44 2004
@@ -43,7 +43,7 @@
     <div id="navlist">
     <ul>
     <netui-data:repeater dataSource="pageFlow.categories">
-        <li><netui:anchor tagId="${container.item.selection}" action="selectList">${container.item.description}
+        <li><netui:anchor styleClass="${container.item.selection}" action="selectList">${container.item.description}
             <netui:parameter name="target" value="${container.item.name}" />
             </netui:anchor></li>
      </netui-data:repeater>

Modified: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/style.css
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/style.css	(original)
+++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/index/style.css	Tue Jul 27 19:52:44 2004
@@ -94,10 +94,10 @@
 	color: #333;
 }
 
-#uberlink, #uberlink:link, #uberlink:visited, #uberlink:hover {
-	border: 1px solid #333;
-	background-color: #FF6600;
-	background-image:  url(linkOver.gif);
+a.uberlink, a.uberlink:link, a.uberlink :visited, a.uberlink :hover {
+	border: 1px solid #333 !important;
+	background-color: #FF6600 !important;
+	background-image:  url(linkOver.gif) !important;
 	color: #333 !important;
 }
 

Modified: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/template/divPanelTree/Controller.jpf
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/template/divPanelTree/Controller.jpf	(original)
+++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/template/divPanelTree/Controller.jpf	Tue Jul 27 19:52:44 2004
@@ -107,8 +107,6 @@
 
     /**
      * This method represents the point of entry into the pageflow
-     * @jpf:action
-     * @jpf:forward name="success" path="index.jsp"
      */
     @Jpf.Action(
         forwards = {
@@ -121,10 +119,6 @@
         return new Forward("success");
     }
 
-    /**
-     * @jpf:action
-     * @jpf:forward name="success" path="index.jsp"
-     */
     @Jpf.Action(
         forwards = {
             @Jpf.Forward(

Modified: incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/AnchorActions.xml
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/AnchorActions.xml	(original)
+++ incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/AnchorActions.xml	Tue Jul 27 19:52:44 2004
@@ -2,7 +2,7 @@
 <ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
    <ses:sessionName>AnchorActions</ses:sessionName>
    <ses:tester>Daryl</ses:tester>
-   <ses:startDate>07 Jul 2004, 08:15:45.885 AM MDT</ses:startDate>
+   <ses:startDate>27 Jul 2004, 10:21:53.027 AM MDT</ses:startDate>
    <ses:description>Daryl</ses:description>
    <ses:tests>
       <ses:test>
@@ -15,12 +15,7 @@
             <ses:uri>/coreWeb/tags/anchorActions/ActionOne.do</ses:uri>
             <ses:method>GET</ses:method>
             <ses:parameters/>
-            <ses:cookies>
-               <ses:cookie>
-                  <ses:name>JSESSIONID</ses:name>
-                  <ses:value>B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
-               </ses:cookie>
-            </ses:cookies>
+            <ses:cookies/>
             <ses:headers>
                <ses:header>
                   <ses:name>accept</ses:name>
@@ -39,10 +34,6 @@
                   <ses:value>Keep-Alive, TE</ses:value>
                </ses:header>
                <ses:header>
-                  <ses:name>cookie</ses:name>
-                  <ses:value>JSESSIONID=B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
-               </ses:header>
-               <ses:header>
                   <ses:name>cookie2</ses:name>
                   <ses:value>$Version="1"</ses:value>
                </ses:header>
@@ -56,7 +47,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testid</ses:name>
-                  <ses:value>-64b69cb9:fd99ce7512:-7649</ses:value>
+                  <ses:value>-42731dee:fe01681d8e:-7fda</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testnumber</ses:name>
@@ -114,7 +105,7 @@
 </html>]]></ses:responseBody>
          </ses:response>
          <ses:testResults>
-            <ses:testStatus>fail</ses:testStatus>
+            <ses:testStatus>pass</ses:testStatus>
          </ses:testResults>
       </ses:test>
       <ses:test>
@@ -130,7 +121,7 @@
             <ses:cookies>
                <ses:cookie>
                   <ses:name>JSESSIONID</ses:name>
-                  <ses:value>B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+                  <ses:value>7DC2AEC60BA4DD26E3E282591D9480AA</ses:value>
                </ses:cookie>
             </ses:cookies>
             <ses:headers>
@@ -152,7 +143,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>cookie</ses:name>
-                  <ses:value>JSESSIONID=B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+                  <ses:value>$Version=0; JSESSIONID=7DC2AEC60BA4DD26E3E282591D9480AA; $Path=/coreWeb</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>cookie2</ses:name>
@@ -168,7 +159,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testid</ses:name>
-                  <ses:value>-64b69cb9:fd99ce7512:-7649</ses:value>
+                  <ses:value>-42731dee:fe01681d8e:-7fda</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testnumber</ses:name>
@@ -226,7 +217,7 @@
 </html>]]></ses:responseBody>
          </ses:response>
          <ses:testResults>
-            <ses:testStatus>fail</ses:testStatus>
+            <ses:testStatus>pass</ses:testStatus>
          </ses:testResults>
       </ses:test>
       <ses:test>
@@ -242,7 +233,7 @@
             <ses:cookies>
                <ses:cookie>
                   <ses:name>JSESSIONID</ses:name>
-                  <ses:value>B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+                  <ses:value>7DC2AEC60BA4DD26E3E282591D9480AA</ses:value>
                </ses:cookie>
             </ses:cookies>
             <ses:headers>
@@ -264,7 +255,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>cookie</ses:name>
-                  <ses:value>JSESSIONID=B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+                  <ses:value>$Version=0; JSESSIONID=7DC2AEC60BA4DD26E3E282591D9480AA; $Path=/coreWeb</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>cookie2</ses:name>
@@ -280,7 +271,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testid</ses:name>
-                  <ses:value>-64b69cb9:fd99ce7512:-7649</ses:value>
+                  <ses:value>-42731dee:fe01681d8e:-7fda</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testnumber</ses:name>
@@ -338,7 +329,7 @@
 </html>]]></ses:responseBody>
          </ses:response>
          <ses:testResults>
-            <ses:testStatus>fail</ses:testStatus>
+            <ses:testStatus>pass</ses:testStatus>
          </ses:testResults>
       </ses:test>
       <ses:test>
@@ -354,7 +345,7 @@
             <ses:cookies>
                <ses:cookie>
                   <ses:name>JSESSIONID</ses:name>
-                  <ses:value>B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+                  <ses:value>7DC2AEC60BA4DD26E3E282591D9480AA</ses:value>
                </ses:cookie>
             </ses:cookies>
             <ses:headers>
@@ -376,7 +367,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>cookie</ses:name>
-                  <ses:value>JSESSIONID=B9FF7DBF609DA82170EA74B6B4EC4C07</ses:value>
+                  <ses:value>$Version=0; JSESSIONID=7DC2AEC60BA4DD26E3E282591D9480AA; $Path=/coreWeb</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>cookie2</ses:name>
@@ -392,7 +383,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testid</ses:name>
-                  <ses:value>-64b69cb9:fd99ce7512:-7649</ses:value>
+                  <ses:value>-42731dee:fe01681d8e:-7fda</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testnumber</ses:name>
@@ -438,7 +429,7 @@
     <div> <hr /><table border="1" cellspacing="0" style="color:red;background-color:white">
  <tr><th colspan="6">Page Errors</th></tr>
  <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
-<tr><th>1</th><th>Anchor</th><th>Message</th><td>Action was resolved as "", this is probably the result of an expression bound to a null Object.</td></tr>
+<tr><th>1</th><th>Anchor</th><th>Message</th><td>Attribute 'action' is required to have a value.  The value "" is illegal.  This is often cause by binding to an object with a null value.</td></tr>
 <tr><th>2</th><th>Anchor</th><th>Message</th><td>Action 'invalidAction' is not a valid action.</td></tr>
 </table></div>
 </body>
@@ -449,9 +440,9 @@
          </ses:testResults>
       </ses:test>
    </ses:tests>
-   <ses:endDate>07 Jul 2004, 08:15:45.935 AM MDT</ses:endDate>
+   <ses:endDate>27 Jul 2004, 10:21:54.980 AM MDT</ses:endDate>
    <ses:sessionStatus>fail</ses:sessionStatus>
    <ses:testCount>4</ses:testCount>
-   <ses:passedCount>0</ses:passedCount>
-   <ses:failedCount>4</ses:failedCount>
+   <ses:passedCount>3</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
 </ses:recorderSession>

Modified: incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ImageAnchorActions.xml
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ImageAnchorActions.xml	(original)
+++ incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ImageAnchorActions.xml	Tue Jul 27 19:52:44 2004
@@ -2,7 +2,7 @@
 <ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
    <ses:sessionName>ImageAnchorActions</ses:sessionName>
    <ses:tester>Daryl</ses:tester>
-   <ses:startDate>07 Jul 2004, 02:53:34.173 PM MDT</ses:startDate>
+   <ses:startDate>27 Jul 2004, 12:32:35.496 PM MDT</ses:startDate>
    <ses:description>Daryl</ses:description>
    <ses:tests>
       <ses:test>
@@ -47,7 +47,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testid</ses:name>
-                  <ses:value>750d686d:fd9b5e09ef:-7c7d</ses:value>
+                  <ses:value>-b9e2a5c:fe01dc55c3:-7dac</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>user-agent</ses:name>
@@ -100,7 +100,7 @@
 </html>]]></ses:responseBody>
          </ses:response>
          <ses:testResults>
-            <ses:testStatus>fail</ses:testStatus>
+            <ses:testStatus>pass</ses:testStatus>
          </ses:testResults>
       </ses:test>
       <ses:test>
@@ -116,7 +116,7 @@
             <ses:cookies>
                <ses:cookie>
                   <ses:name>JSESSIONID</ses:name>
-                  <ses:value>59D839FB6206CCBBE07A1676BDC20B6C</ses:value>
+                  <ses:value>EA41B1F9AA2332070B9D2FFF26E33D83</ses:value>
                </ses:cookie>
             </ses:cookies>
             <ses:headers>
@@ -138,7 +138,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>cookie</ses:name>
-                  <ses:value>$Version=0; JSESSIONID=59D839FB6206CCBBE07A1676BDC20B6C; $Path=/coreWeb</ses:value>
+                  <ses:value>$Version=0; JSESSIONID=EA41B1F9AA2332070B9D2FFF26E33D83; $Path=/coreWeb</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>cookie2</ses:name>
@@ -154,7 +154,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testid</ses:name>
-                  <ses:value>750d686d:fd9b5e09ef:-7c7d</ses:value>
+                  <ses:value>-b9e2a5c:fe01dc55c3:-7dac</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>user-agent</ses:name>
@@ -207,7 +207,7 @@
 </html>]]></ses:responseBody>
          </ses:response>
          <ses:testResults>
-            <ses:testStatus>fail</ses:testStatus>
+            <ses:testStatus>pass</ses:testStatus>
          </ses:testResults>
       </ses:test>
       <ses:test>
@@ -223,7 +223,7 @@
             <ses:cookies>
                <ses:cookie>
                   <ses:name>JSESSIONID</ses:name>
-                  <ses:value>59D839FB6206CCBBE07A1676BDC20B6C</ses:value>
+                  <ses:value>EA41B1F9AA2332070B9D2FFF26E33D83</ses:value>
                </ses:cookie>
             </ses:cookies>
             <ses:headers>
@@ -245,7 +245,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>cookie</ses:name>
-                  <ses:value>$Version=0; JSESSIONID=59D839FB6206CCBBE07A1676BDC20B6C; $Path=/coreWeb</ses:value>
+                  <ses:value>$Version=0; JSESSIONID=EA41B1F9AA2332070B9D2FFF26E33D83; $Path=/coreWeb</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>cookie2</ses:name>
@@ -261,7 +261,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testid</ses:name>
-                  <ses:value>750d686d:fd9b5e09ef:-7c7d</ses:value>
+                  <ses:value>-b9e2a5c:fe01dc55c3:-7dac</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>user-agent</ses:name>
@@ -314,7 +314,7 @@
 </html>]]></ses:responseBody>
          </ses:response>
          <ses:testResults>
-            <ses:testStatus>fail</ses:testStatus>
+            <ses:testStatus>pass</ses:testStatus>
          </ses:testResults>
       </ses:test>
       <ses:test>
@@ -330,7 +330,7 @@
             <ses:cookies>
                <ses:cookie>
                   <ses:name>JSESSIONID</ses:name>
-                  <ses:value>59D839FB6206CCBBE07A1676BDC20B6C</ses:value>
+                  <ses:value>EA41B1F9AA2332070B9D2FFF26E33D83</ses:value>
                </ses:cookie>
             </ses:cookies>
             <ses:headers>
@@ -352,7 +352,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>cookie</ses:name>
-                  <ses:value>$Version=0; JSESSIONID=59D839FB6206CCBBE07A1676BDC20B6C; $Path=/coreWeb</ses:value>
+                  <ses:value>$Version=0; JSESSIONID=EA41B1F9AA2332070B9D2FFF26E33D83; $Path=/coreWeb</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>cookie2</ses:name>
@@ -368,7 +368,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testid</ses:name>
-                  <ses:value>750d686d:fd9b5e09ef:-7c7d</ses:value>
+                  <ses:value>-b9e2a5c:fe01dc55c3:-7dac</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>user-agent</ses:name>
@@ -421,7 +421,7 @@
 </html>]]></ses:responseBody>
          </ses:response>
          <ses:testResults>
-            <ses:testStatus>fail</ses:testStatus>
+            <ses:testStatus>pass</ses:testStatus>
          </ses:testResults>
       </ses:test>
       <ses:test>
@@ -437,7 +437,7 @@
             <ses:cookies>
                <ses:cookie>
                   <ses:name>JSESSIONID</ses:name>
-                  <ses:value>59D839FB6206CCBBE07A1676BDC20B6C</ses:value>
+                  <ses:value>EA41B1F9AA2332070B9D2FFF26E33D83</ses:value>
                </ses:cookie>
             </ses:cookies>
             <ses:headers>
@@ -459,7 +459,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>cookie</ses:name>
-                  <ses:value>$Version=0; JSESSIONID=59D839FB6206CCBBE07A1676BDC20B6C; $Path=/coreWeb</ses:value>
+                  <ses:value>$Version=0; JSESSIONID=EA41B1F9AA2332070B9D2FFF26E33D83; $Path=/coreWeb</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>cookie2</ses:name>
@@ -475,7 +475,7 @@
                </ses:header>
                <ses:header>
                   <ses:name>testrecorder.playback.testid</ses:name>
-                  <ses:value>750d686d:fd9b5e09ef:-7c7d</ses:value>
+                  <ses:value>-b9e2a5c:fe01dc55c3:-7dac</ses:value>
                </ses:header>
                <ses:header>
                   <ses:name>user-agent</ses:name>
@@ -517,7 +517,7 @@
  <tr><th colspan="6">Page Errors</th></tr>
  <tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
 <tr><th>1</th><th>ImageAnchor</th><th>Message</th><td>Action 'invalidAction' is not a valid action.</td></tr>
-<tr><th>2</th><th>ImageAnchor</th><th>Message</th><td>Action was resolved as "", this is probably the result of an expression bound to a null Object.</td></tr>
+<tr><th>2</th><th>ImageAnchor</th><th>Message</th><td>Attribute 'action' is required to have a value.  The value "" is illegal.  This is often cause by binding to an object with a null value.</td></tr>
 </table></div>
 </body>
 </html>]]></ses:responseBody>
@@ -527,9 +527,9 @@
          </ses:testResults>
       </ses:test>
    </ses:tests>
-   <ses:endDate>07 Jul 2004, 02:53:36.016 PM MDT</ses:endDate>
+   <ses:endDate>27 Jul 2004, 12:32:37.539 PM MDT</ses:endDate>
    <ses:sessionStatus>fail</ses:sessionStatus>
    <ses:testCount>5</ses:testCount>
-   <ses:passedCount>0</ses:passedCount>
-   <ses:failedCount>5</ses:failedCount>
+   <ses:passedCount>4</ses:passedCount>
+   <ses:failedCount>1</ses:failedCount>
 </ses:recorderSession>