从 Struts 2.3.33 迁移到 Struts 2.5.12 LocalizedTextUtil 已删除

Migrate from Struts 2.3.33 to Struts 2.5.12 LocalizedTextUtil is removed

我们尝试从 Struts 2.33 迁移到 Struts 2.5.12。

我们直接在我们的应用程序中使用了LocalizedTextUtil

我发现 LocalizedTextUtilcom.opensymphony.xwork2.util.LocalizedTextUtil 中删除了。我试图搜索但找不到任何东西

我找到了一些 类,比如 StrutsLocalizedTextProviderGlobalLocalizedTextProvider,但似乎它们不是我可以使用的。

我已查看 migration-guide 但找不到任何评论。

有什么选择?

你应该使用 StrutsLocalizedTextProvider or GlobalLocalizedTextProvider。他们有一些 util api,但是它被标记为已弃用。令人高兴的是,它记录在 javadoc 中。

我正在引用 repo 中的源代码,因为我无法在 Struts 2 Core 2.5.11-SNAPSHOT [=23= 的 javadoc 中找到这些 类 ]

struts.xml 应设置为:

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

并且 CustomStrutsTextProviderFactory 可以添加捆绑包

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);
}

}

感谢@LukazLenart https://issues.apache.org/jira/browse/WW-4829