Hao Zhong created WICKET-6857:
---------------------------------

             Summary: A cloned bug
                 Key: WICKET-6857
                 URL: https://issues.apache.org/jira/browse/WICKET-6857
             Project: Wicket
          Issue Type: Bug
            Reporter: Hao Zhong


I notice that InitializerStringResourceLoader is similar to 
ValidatorStringResourceLoader. For example,  InitializerStringResourceLoader 
has a loadStringResource method:
{code:java}
@Override@Override public String loadStringResource(Class<?> clazz, final 
String key, final Locale locale, final String style, final String variation) {
 for (IInitializer initializer : initializers) { 
   String string = super.loadStringResource(initializer.getClass(), key, 
locale, style, variation); 
   if (string != null) { 
           return string; 
    } 
  }
}
{code}
A previous version of ValidatorStringResourceLoader has a similar method:
{code:java}
@Override@Override public String loadStringResource(final Component component, 
final String key, final Locale locale, final String style, final String 
variation) { 
    if (component == null || !(component instanceof FormComponent)) { 
       return null; 
    }
    FormComponent<?> fc = (FormComponent<?>)component; 
    for (IValidator<?> validator : fc.getValidators()) { 
        String resource = loadStringResource(validator.getClass(), key, locale, 
style, variation); 
        if (resource != null) { 
             return resource; 
         } 
     }
      // not found 
     return null; 
}
{code}
The above method is buggy. https://issues.apache.org/jira/browse/WICKET-4379

Its fixed code is as folllows:
{code:java}
@Override@Override public String loadStringResource(final Component component, 
final String key, final Locale locale, final String style, final String 
variation) { 
  if (component == null || !(component instanceof FormComponent)) { return 
null; }
   FormComponent<?> fc = (FormComponent<?>)component; 
   for (IValidator<?> validator : fc.getValidators()) { 
      Class<?> scope = getScope(validator); String resource = 
loadStringResource(scope, key, locale, style, variation); 
    if (resource != null) {  
        return resource; 
    } 
   }
 // not found 
  return null; 
}
 private Class<? extends IValidator> getScope(IValidator<?> validator) { 
  Class<? extends IValidator> scope; 
   if (validator instanceof ValidatorAdapter) { 
       scope = ((ValidatorAdapter) validator).getValidator().getClass(); 
   } else { 
       scope = validator.getClass(); 
   } 
   return scope; 
   }
}
{code}
The InitializerStringResourceLoader.loadStringResource can have a similar 
problem, and shall be checked.  

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to