【问题标题】:How do I read the bundle in context from within a JSP custom tag?如何从 JSP 自定义标记中读取上下文中的包?
【发布时间】:2012-01-14 06:41:23
【问题描述】:

我有一个 JSP 2.0 文件,其中包含对自定义标记的调用,该标记需要知道页面上当前正在使用什么包,因此它可以查找一些资源。自定义标签是用 Java 编写的。捆绑包可以根据使用自定义标签的页面进行更改,但资源键将始终相同,因此我想使用现有的fmt:bundle 标签来指定它,例如:

<fmt:bundle basename="myBundle">
    <custom:tag title="text.title"/>
</fmt:bundle>

我一直假设fmt:bundle 标签可以从内部标签读取(或以其他方式提供其环境),其中自定义标签在上面的示例中(与它与@交互的方式相同) 987654324@ 标签),但我无法弄清楚如何从定义自定义标签的 Java 中访问 fmt:bundle 应该定义的 LocalizationContext

我试过了

LocalizationContext lc = (LocalizationContext)Config.get(
        pageContext.getRequest(),Config.FMT_LOCALIZATION_CONTEXT);
ResourceBundle rb = lc.getResourceBundle();
String s =rb.getKey(title);

但我只是得到

java.util.MissingResourceException: Can't find resource for bundle
    java.util.PropertyResourceBundle, key text.title

这似乎表明这不是正确的查看位置(我猜这已经落入了默认捆绑包?)。

一种解决方法可能是将包名称传递到自定义标记中,但我确信我想要实现的目标应该是可能的,只要我的 JSP 知识不让我失望,所以我希望有人可以帮助我更好地理解!

我该怎么办?

【问题讨论】:

    标签: java jsp internationalization tags resourcebundle


    【解决方案1】:

    根据 JSTL 规范,有一个名为 LocaleSupport 的类实现包查找,并且可以由任何需要生成本地化消息的标记处理程序实现使用。

    【讨论】:

    • 谢谢。 LocaleSupport 看起来非常有用,我会尝试一下。同时,我查看了MessageSupport 标记的来源,并在没有指定捆绑标记时完成了那里的操作(查找BundleSupport 分类祖先并从中获取LocalizationContext)。尽管要完成这项工作,我还需要确保 LocalizationContext 在页面范围内而不是在请求范围内(这在我的应用程序中似乎是合理的。)
    猜你喜欢
    • 2011-01-30
    • 2016-07-05
    • 2016-04-30
    • 1970-01-01
    • 2012-06-06
    • 2011-04-16
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多