Author: ivaynberg Date: Sat Mar 8 11:58:11 2008 New Revision: 635062 URL: http://svn.apache.org/viewvc?rev=635062&view=rev Log: WICKET-1400: FormComponent.error(ivalidationerror) error needs to show tried resource keys
Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/validation/ValidationError.java Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java?rev=635062&r1=635061&r2=635062&view=diff ============================================================================== --- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java (original) +++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java Sat Mar 8 11:58:11 2008 @@ -22,9 +22,11 @@ import java.util.Collections; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import org.apache.wicket.Application; import org.apache.wicket.Component; @@ -51,6 +53,8 @@ import org.apache.wicket.validation.IValidatorAddListener; import org.apache.wicket.validation.ValidationError; import org.apache.wicket.version.undo.Change; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -86,6 +90,8 @@ implements IFormVisitorParticipant { + private static final Logger logger = LoggerFactory.getLogger(FormComponent.class); + /** * Visitor for traversing form components */ @@ -128,6 +134,7 @@ */ private class MessageSource implements IErrorMessageSource { + private final Set/* <String> */triedKeys = new LinkedHashSet(); /** * @see org.apache.wicket.validation.IErrorMessageSource#getMessage(java.lang.String) @@ -153,7 +160,7 @@ // Note: It is important that the default value of "" is provided // to getString() not to throw a MissingResourceException or to // return a default string like "[Warning: String ..." - String message = localizer.getString(resource, formComponent.getParent(), ""); + String message = getString(localizer, resource, formComponent.getParent()); // If not found, than ... if (Strings.isEmpty(message)) @@ -162,7 +169,7 @@ resource = prefix + key; - message = localizer.getString(resource, formComponent.getParent(), ""); + message = getString(localizer, resource, formComponent.getParent()); } if (Strings.isEmpty(message)) @@ -175,7 +182,7 @@ // provided // to getString() not to throw a MissingResourceException or to // return a default string like "[Warning: String ..." - message = localizer.getString(resource, formComponent, ""); + message = getString(localizer, resource, formComponent); // If not found, than ... if (Strings.isEmpty(message)) @@ -183,8 +190,7 @@ // Try a variation of the resource key resource = prefix + key; - - message = localizer.getString(resource, formComponent, ""); + message = getString(localizer, resource, formComponent); } } @@ -197,6 +203,12 @@ return message; } + private String getString(Localizer localizer, String key, Component component) + { + triedKeys.add(key); + return localizer.getString(key, component, ""); + } + /** * @see org.apache.wicket.validation.IErrorMessageSource#substitute(java.lang.String, * java.util.Map) @@ -535,14 +547,31 @@ { throw new IllegalArgumentException("Argument [[error]] cannot be null"); } - String message = error.getErrorMessage(new MessageSource()); + MessageSource source = new MessageSource(); + String message = error.getErrorMessage(source); if (message == null) { - // XXX maybe make message source remember tried resource keys so a - // more detailed error message can be created - like show which keys - // were tried - message = "Could not locate error message for error: " + error.toString(); + StringBuffer buffer = new StringBuffer(); + buffer.append("Could not locate error message for component: "); + buffer.append(Classes.simpleName(getClass())); + buffer.append("@"); + buffer.append(getPageRelativePath()); + buffer.append(" and error: "); + buffer.append(error.toString()); + buffer.append(". Tried keys: "); + Iterator/* <String> */keys = source.triedKeys.iterator(); + while (keys.hasNext()) + { + buffer.append(keys.next()); + if (keys.hasNext()) + { + buffer.append(", "); + } + } + buffer.append("."); + message = buffer.toString(); + logger.warn(message); } error(new ValidationErrorFeedback(error, message)); } Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/validation/ValidationError.java URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/validation/ValidationError.java?rev=635062&r1=635061&r2=635062&view=diff ============================================================================== --- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/validation/ValidationError.java (original) +++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/validation/ValidationError.java Sat Mar 8 11:58:11 2008 @@ -25,6 +25,7 @@ import java.util.Map.Entry; import org.apache.wicket.IClusterable; +import org.apache.wicket.util.lang.Classes; /** * A versatile implementation of [EMAIL PROTECTED] IValidationError} that supports message resolution from @@ -97,12 +98,12 @@ if (name == null || name.trim().length() == 0) { throw new IllegalArgumentException( - "Argument [[name]] cannot be null or an empty string"); + "Argument [[name]] cannot be null or an empty string"); } if (value == null) { throw new IllegalArgumentException( - "Argument [[value]] cannot be null or an empty string"); + "Argument [[value]] cannot be null or an empty string"); } getVariables().put(name, value); @@ -159,9 +160,9 @@ } // ... if no keys matched try the default - if (errorMessage == null && this.message != null) + if (errorMessage == null && message != null) { - errorMessage = this.message; + errorMessage = message; } // if a message was found perform variable substitution @@ -207,7 +208,7 @@ public String toString() { StringBuffer tostring = new StringBuffer(); - tostring.append("[").append(getClass().getName()); + tostring.append("[").append(Classes.simpleName(getClass())); tostring.append(" message=[").append(message); @@ -236,8 +237,11 @@ while (i.hasNext()) { final Map.Entry e = (Entry)i.next(); - tostring.append("[").append(e.getKey()).append("=").append(e.getValue()) - .append("]"); + tostring.append("[") + .append(e.getKey()) + .append("=") + .append(e.getValue()) + .append("]"); if (i.hasNext()) { tostring.append(",");