【问题标题】:Migrate from Struts 2.3.33 to Struts 2.5.12 LocalizedTextUtil is removed从 Struts 2.3.33 迁移到 Struts 2.5.12 LocalizedTextUtil 被移除
【发布时间】:2017-07-26 12:33:56
【问题描述】:

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

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

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

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

我已经查看了migration-guide,但找不到任何关于它的评论。

有什么选择?

【问题讨论】:

  • 取决于您使用它的目的和位置。你可以注入LocalizedTextProvider。见issues.apache.org/jira/browse/WW-4813
  • 我正在使用它来覆盖 struts 2 资源包键。 stackoverflow.com/questions/28137603/…你已经帮助了我大约 2 年 :)
  • :) 同样,这取决于您想在哪里使用它。但是,现在您可以创建 GlobalLocalizedTextProvider 的新实例,向其添加捆绑包并使用它。您也可以将其包裹在一些 bean 中并注入。
  • 它没有用!我试过LocalizedTextProvider provider = new GlobalLocalizedTextProvider(); provider.addDefaultResourceBundle('messages/resources'),但没有添加资源。我应该使用其他技术吗?
  • 我在issues.apache.org/jira/browse/WW-4829 设置了一个问题。同时我看到struts.apache.org/docs/… 不再有效。

标签: java localization struts2 migration


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多