You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ri...@apache.org on 2005/05/13 08:55:21 UTC

svn commit: r169958 - in /incubator/beehive/trunk/netui: src/pageflow/org/apache/beehive/netui/pageflow/ src/pageflow/org/apache/beehive/netui/pageflow/internal/ test/webapps/drt/coreWeb/validation/argExpressions/

Author: rich
Date: Thu May 12 23:55:20 2005
New Revision: 169958

URL: http://svn.apache.org/viewcvs?rev=169958&view=rev
Log:
Changes to address http://issues.apache.org/jira/browse/BEEHIVE-712 : Inline error messages that are bound from a pageflow no longer work

There actually wasn't a bug here, only some silly legacy design.  There were *two* constructors for ExpressionMessage, one that evaluated expressions in the message-args (and thus required some additional parameters), and one that didn't.  The form bean in the bug repro case was using the latter.

This confusion was unnecessary, though, since an earlier refactor made it possible to evaluate expressions in args without the extra parameters to the ExpressionMessage constructor.  I removed the large constructor and made the smaller one expression-aware, so the repro case now works as-is.

tests: bvt in netui (WinXP)
BB: self (linux)


Modified:
    incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ExpressionMessage.java
    incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowUtils.java
    incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java
    incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ExpressionAwareMessageResources.java
    incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/validation/argExpressions/Controller.jpf

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ExpressionMessage.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ExpressionMessage.java?rev=169958&r1=169957&r2=169958&view=diff
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ExpressionMessage.java (original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ExpressionMessage.java Thu May 12 23:55:20 2005
@@ -30,39 +30,22 @@
 public class ExpressionMessage
         extends ActionMessage
 {
-    private static final Logger _log = Logger.getInstance( ExpressionMessage.class );
-    
-    public ExpressionMessage( String expression, Object[] messageArgs )
+    public ExpressionMessage( String expression, Object[] messageArgExpressions )
     {
-        super( InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX + expression, messageArgs );
+        super( InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX + expression, prefixArgs( messageArgExpressions ) );
     }
     
-    public ExpressionMessage( String expression, Object[] messageArgExpressions, Object formBean,
-                              HttpServletRequest request )
+    private static Object[] prefixArgs( Object[] messageArgExpressions )
     {
-        super( InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX + expression,
-               evaluateArgs( messageArgExpressions, formBean, request, InternalUtils.getServletContext( request ) ) );
-    }
-    
-    private static Object[] evaluateArgs( Object[] args, Object formBean, HttpServletRequest request,
-                                               ServletContext servletContext )
-    {
-        if ( args == null ) return null;
+        if ( messageArgExpressions == null ) return null;
+        
+        Object[] ret = new Object[ messageArgExpressions.length ];
         
-        for ( int i = 0; i < args.length; i++ )
-        { 
-            String argStr = args[i].toString();
-            
-            try
-            {
-                args[i] = InternalExpressionUtils.evaluateMessage( argStr, formBean, request, servletContext );
-            }
-            catch ( Exception e )
-            {
-                _log.error( "Could not evaluate message expression " + argStr, e );
-            }
+        for ( int i = 0; i < messageArgExpressions.length; i++ )
+        {
+            ret[i] = InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX + messageArgExpressions[i];
         }
         
-        return args;
+        return ret;
     }
 }

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowUtils.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowUtils.java?rev=169958&r1=169957&r2=169958&view=diff
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowUtils.java (original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowUtils.java Thu May 12 23:55:20 2005
@@ -933,8 +933,7 @@
     public static void addActionErrorExpression( HttpServletRequest request, String propertyName, String expression,
                                                  Object[] messageArgs )
     {
-        Object formBean = InternalUtils.unwrapFormBean( InternalUtils.getCurrentActionForm( request ) );
-        ExpressionMessage msg = new ExpressionMessage( expression, messageArgs, formBean, request );
+        ExpressionMessage msg = new ExpressionMessage( expression, messageArgs );
         InternalUtils.addActionError( propertyName, msg, request );
     }
     

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java?rev=169958&r1=169957&r2=169958&view=diff
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java (original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java Thu May 12 23:55:20 2005
@@ -365,7 +365,7 @@
                 try
                 {
                     // The message may be an expression.  Evaluate it.
-                    message = InternalExpressionUtils.evaluateMessage(message, form, request, getServletContext());
+                    message = InternalExpressionUtils.evaluateMessage( message, form, request, getServletContext() );
                 }
                 catch ( ELException e )
                 {

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ExpressionAwareMessageResources.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ExpressionAwareMessageResources.java?rev=169958&r1=169957&r2=169958&view=diff
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ExpressionAwareMessageResources.java (original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ExpressionAwareMessageResources.java Thu May 12 23:55:20 2005
@@ -38,7 +38,6 @@
     private Object _formBean;
     private transient HttpServletRequest _request;
     private transient ServletContext _servletContext;
-    private HashMap _cachedMessages = null;
 
     public ExpressionAwareMessageResources( Object formBean, HttpServletRequest request, ServletContext servletContext )
     {
@@ -62,29 +61,51 @@
     {
         if ( key.startsWith( InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX ) )
         {
-            if ( _cachedMessages != null && _cachedMessages.containsKey( key ) )
-            {
-                return ( String ) _cachedMessages.get( key );
-            }
-            
-            String argExpr = key.substring(InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX_LENGTH);
-            String value = null;
+            String messageExpr = key.substring( InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX_LENGTH );
         
             try
             {
-                value = InternalExpressionUtils.evaluateMessage( argExpr, _formBean, _request, _servletContext );
+                return InternalExpressionUtils.evaluateMessage( messageExpr, _formBean, _request, _servletContext );
             }
             catch ( Exception e )
             {
-                _log.error( "Could not evaluate message expression " + argExpr, e );
+                _log.error( "Could not evaluate message expression " + messageExpr, e );
             }
                 
-            if ( _cachedMessages == null ) _cachedMessages = new HashMap();
-            _cachedMessages.put( key, value );
-            return value;
+            return null;
         }
         
         return _delegate != null ? _delegate.getMessage( locale, key ) : null;
+    }
+    
+    public String getMessage( Locale locale, String key, Object args[] )
+    {
+        for ( int i = 0; i < args.length; i++ )
+        {
+            Object arg = args[i];
+            
+            if ( arg instanceof String )
+            {
+                String argStr = ( String ) arg;
+                
+                if ( argStr.startsWith( InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX ) )
+                {
+                    String argExpr = argStr.substring( InternalConstants.MESSAGE_IS_EXPRESSION_PREFIX_LENGTH );
+                
+                    try
+                    {
+                        args[i] =
+                            InternalExpressionUtils.evaluateMessage( argExpr, _formBean, _request, _servletContext );
+                    }
+                    catch ( Exception e )
+                    {
+                        _log.error( "Could not evaluate message arg expression " + argExpr, e );
+                    }
+                }
+            }
+        }
+        
+        return super.getMessage( locale, key, args );
     }
 
     protected void setFormBean( Object formBean )

Modified: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/validation/argExpressions/Controller.jpf
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/validation/argExpressions/Controller.jpf?rev=169958&r1=169957&r2=169958&view=diff
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/validation/argExpressions/Controller.jpf (original)
+++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/validation/argExpressions/Controller.jpf Thu May 12 23:55:20 2005
@@ -53,8 +53,8 @@
     {
         public void validate( ActionMapping mapping, HttpServletRequest request, ActionMessages errors )
         {
-            errors.add( "foo", new ExpressionMessage( "(Form1) this is arg 0: {0}", new Object[]{ "${pageFlow.arg0}" }, this, request ) );
-            errors.add( "bar", new ExpressionMessage( "(Form1) ${pageFlow.message}", new Object[]{ "${pageFlow.arg0}", "${pageFlow.arg1}" }, this, request ) );
+            errors.add( "foo", new ExpressionMessage( "(Form1) this is arg 0: {0}", new Object[]{ "${pageFlow.arg0}" } ) );
+            errors.add( "bar", new ExpressionMessage( "(Form1) ${pageFlow.message}", new Object[]{ "${pageFlow.arg0}", "${pageFlow.arg1}" } ) );
         }
     }