【问题标题】:localization in JSP using JSTL and key/values from the database使用 JSTL 和数据库中的键/值在 JSP 中进行本地化
【发布时间】:2012-09-11 17:11:08
【问题描述】:

我正在使用 JSP 和 Java Servlet 构建一个 Web 应用程序。目前我正在使用 JSTL fmt 使用属性文件(messages.properties)进行国际化。但是我的客户希望能够实时更新文本,所以我需要将键/值从属性文件移动到数据库。问题是我不知道如何将数据库中的文本读入例如 JSP 文件中的<fmt:message> 标记。

非常欢迎任何帮助,谢谢

//陌陌

【问题讨论】:

  • 数据库查询是重量级的;如果您必须对网页中的每个标题进行查询,那将非常慢。我建议在需要时重新加载国际化包的机制。
  • 您是否已经设置了数据库访问权限?您可以在数据库中使用区域设置或语言键存储对象的名称和描述,并让您的 servlet 确定当前区域设置。
  • 感谢您的回答。 @SJuan76 确实,使用此解决方案应用程序会非常慢。您对如何在需要时重新加载国际化包有什么建议吗?
  • @Paujo 是的,我已经设置了数据库访问权限,并且可以检索键/值对。问题是将它们传递给 JSP 文件。
  • 无论是从文件还是从数据库中读取,都必须将其缓存在 mpa 中(我没有使用过 fmt,我通常使用 ResourceBundle,它已经做到了)。提供重新从源重新加载该地图的方法。

标签: java database jstl


【解决方案1】:

<fmt:message> 可以使用LocalizationContext,而LocalizationContext 又使用ResourceBundle。因此,实际上,您应该专注于如何创建满足您需求的ResourceBundle。如果您绝对必须使用数据库,也许有人已经创建了一个ResourceBundle 实现来处理它。只要您至少使用 Java 6,确保您调查的一件事是ResourceBundle.Control。事实证明,您可以继续使用属性文件,但可以自定义缓存行为。

【讨论】:

  • 是的,我正在使用 Java 6。使用具有缓存行为的属性文件听起来是最好的解决方案。我会调查的方法。谢谢
【解决方案2】:

不适用于fmt。您要么编写自己的标签,要么更改fmt的代码。

【讨论】:

    【解决方案3】:

    这可能是一个解决方案吗?我没有从数据库中读取每个键/值对,而是将它们读入地图并刷新每个骑士。 Database backed i18n for java web-app

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      相关资源
      最近更新 更多