2

We tried to migrate from Struts 2.33 to Struts 2.5.12.

We used LocalizedTextUtil in our application directly.

I found that the LocalizedTextUtil is removed from com.opensymphony.xwork2.util.LocalizedTextUtil. I tried to search but could not find any thing

I found some classes like StrutsLocalizedTextProviderand GlobalLocalizedTextProvider but it seems they are not what I can use them.

I have reviewed migration-guide but could not find any comment about it.

Which alternative is there?

Roman C
  • 49,761
  • 33
  • 66
  • 176
Alireza Fattahi
  • 42,517
  • 14
  • 123
  • 173
  • Depends what for and where you're using it. You can inject `LocalizedTextProvider`. See https://issues.apache.org/jira/browse/WW-4813. – Aleksandr M Jul 26 '17 at 16:42
  • I am using it to override struts 2 resource bundles keys. https://stackoverflow.com/questions/28137603/struts-2-override-resource-messages-keys You have helped me about that 2 years a go :) – Alireza Fattahi Jul 26 '17 at 20:13
  • 1
    :) Again it depends on where do you want to use this. But, now you can create new instance of `GlobalLocalizedTextProvider` add bundles to it and use it. You can also wrap it in some bean and inject it. – Aleksandr M Jul 26 '17 at 20:57
  • It did not work! I tried `LocalizedTextProvider provider = new GlobalLocalizedTextProvider(); provider.addDefaultResourceBundle('messages/resources')` but the resource is not added. Should I use another technique. – Alireza Fattahi Jul 29 '17 at 08:32
  • I set an issue at https://issues.apache.org/jira/browse/WW-4829. Meanwhile I see that https://struts.apache.org/docs/how-do-i-set-a-global-resource-bundle.html is not valid any more. – Alireza Fattahi Jul 29 '17 at 12:44

2 Answers2

1

You should use StrutsLocalizedTextProvider or GlobalLocalizedTextProvider. They have some util api, however it's marked as deprecated. Happily, it's documented in the javadoc.

I'm referencing source code from the repo because I was unable to find these classes in javadoc for Struts 2 Core 2.5.11-SNAPSHOT API

Roman C
  • 49,761
  • 33
  • 66
  • 176
0

The struts.xml should be set as:

<constant name="struts.xworkTextProvider" value="DefaultTextProvider" />
<bean type="com.opensymphony.xwork2.TextProvider" name="DefaultTextProvider" class="utils.MyTextProviderFactory" scope="default" />

And CustomStrutsTextProviderFactory could add bundles

public class MyTextProviderFactory implements TextProviderFactory {

protected LocaleProviderFactory localeProviderFactory;
protected LocalizedTextProvider localizedTextProvider;

@Inject
public MyTextProviderFactory(LocaleProviderFactory localeProviderFactory, LocalizedTextProvider localizedTextProvider) {
    this.localeProviderFactory = localeProviderFactory;
    this.localizedTextProvider = localizedTextProvider;
    
    this.localizedTextProvider.addDefaultResourceBundle("messages/label");
    this.localizedTextProvider.addDefaultResourceBundle("messages/customerA/label");
    
}

@Override
public TextProvider createInstance(Class clazz) {
    TextProvider instance = getTextProvider(clazz);
    if (instance instanceof ResourceBundleTextProvider) {
        ((ResourceBundleTextProvider) instance).setClazz(clazz);
        ((ResourceBundleTextProvider) instance).setLocaleProvider(localeProviderFactory.createLocaleProvider());
    }
    return instance;
}

@Override
public TextProvider createInstance(ResourceBundle bundle) {
    TextProvider instance = getTextProvider(bundle);
    if (instance instanceof ResourceBundleTextProvider) {
        ((ResourceBundleTextProvider) instance).setBundle(bundle);
        ((ResourceBundleTextProvider) instance).setLocaleProvider(localeProviderFactory.createLocaleProvider());
    }
    return instance;
}

protected TextProvider getTextProvider(Class clazz) {
    return new TextProviderSupport(clazz, localeProviderFactory.createLocaleProvider(), localizedTextProvider);
}

protected TextProvider getTextProvider(ResourceBundle bundle) {
    return new TextProviderSupport(bundle, localeProviderFactory.createLocaleProvider(), localizedTextProvider);
}

}

Complete credits to @LukazLenart https://issues.apache.org/jira/browse/WW-4829

Alireza Fattahi
  • 42,517
  • 14
  • 123
  • 173