Author: jeromy
Date: Sun Apr 13 19:10:42 2008
New Revision: 647647

URL: http://svn.apache.org/viewvc?rev=647647&view=rev
Log:
Added useful WARNs to the TextProviderHelper when a message resource is not 
found and the default value is 
used/evaluated

WW-2592

Modified:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Label.java
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/TextProviderHelper.java

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Label.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Label.java?rev=647647&r1=647646&r2=647647&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Label.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Label.java
 Sun Apr 13 19:10:42 2008
@@ -83,8 +83,8 @@
         if (value != null) {
             addParameter("nameValue", findString(value));
         } else if (key != null) {
-            // get the label from a TextProvider
-            String providedLabel = TextProviderHelper.getText(key, "", stack);
+            // get the label from a TextProvider (default value is the key)
+            String providedLabel = TextProviderHelper.getText(key, key, stack);
             addParameter("nameValue", providedLabel);
         } else if (name != null) {
             String expr = name;

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java?rev=647647&r1=647646&r2=647647&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
 Sun Apr 13 19:10:42 2008
@@ -626,8 +626,8 @@
             }
 
             if(this.label == null) {
-                // lookup the label from a TextProvider
-                providedLabel = TextProviderHelper.getText(key, "", stack);
+                // lookup the label from a TextProvider (default value is the 
key)
+                providedLabel = TextProviderHelper.getText(key, key, stack);
             }
 
         }

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/TextProviderHelper.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/TextProviderHelper.java?rev=647647&r1=647646&r2=647647&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/TextProviderHelper.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/TextProviderHelper.java
 Sun Apr 13 19:10:42 2008
@@ -1,6 +1,8 @@
 package org.apache.struts2.util;
 
 import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
 import com.opensymphony.xwork2.TextProvider;
 
 import java.util.Iterator;
@@ -12,6 +14,8 @@
  */
 public class TextProviderHelper {
 
+    private static final Logger LOG = 
LoggerFactory.getLogger(TextProviderHelper.class);
+
     /**
      * <p>Get a message from the first TextProvider encountered in the stack.
      * If the first TextProvider doesn't provide the message the default 
message is returned.</p>
@@ -19,23 +23,46 @@
      * <p>This method was refactored from  [EMAIL PROTECTED] 
org.apache.struts2.components.Text} to use a
      * consistent implementation across UIBean components.</p>
      * @param key             the message key in the resource bundle
-     * @param defaultMessage  the message to return if not found
+     * @param defaultMessage  the message to return if not found (evaluated 
for OGNL)
      * @param args            an array args to be used in a [EMAIL PROTECTED] 
java.text.MessageFormat} message
      * @param stack           the value stack to use for finding the text
        *
      * @return the message if found, otherwise the defaultMessage
      */
     public static String getText(String key, String defaultMessage, 
List<String> args, ValueStack stack) {
-        String msg = defaultMessage;
+        String msg = null;
+        TextProvider tp = null;
 
         for (Iterator iterator = stack.getRoot().iterator(); 
iterator.hasNext();) {
             Object o = iterator.next();
 
             if (o instanceof TextProvider) {
-                TextProvider tp = (TextProvider) o;
-                msg = tp.getText(key, defaultMessage, args, stack);
+                tp = (TextProvider) o;
+                msg = tp.getText(key, null, args, stack);
 
                 break;
+            }
+        }
+
+        if (msg == null) {
+            // evaluate the defaultMesage as an OGNL expression
+            msg = stack.findString(defaultMessage);
+            if (msg == null) {
+                // use the defaultMessage literal value
+                msg = defaultMessage;
+            }
+
+            if (LOG.isWarnEnabled()) {
+                if (tp != null) {
+                    LOG.warn("The first TextProvider in the ValueStack 
("+tp.getClass().getName()+") could not locate the message resource with key 
'"+key+"'");
+                } else {
+                    LOG.warn("Could not locate the message resource '"+key+"' 
as there is no TextProvider in the ValueStack.");
+                }
+                if (msg.equals(defaultMessage)) {
+                    LOG.warn("The default value expression 
'"+defaultMessage+"' was evaluated and did not match a property.  The literal 
value '"+defaultMessage+"' will be used.");
+                } else {
+                    LOG.warn("The default value expression 
'"+defaultMessage+"' evaluated to '"+msg+"'");
+                }
             }
         }
         return msg;


Reply via email to