【问题标题】:Using JSTL fmt:message in a Eclipse IDE Maven Spring 4 Java Web Project在 Eclipse IDE Maven Spring 4 Java Web 项目中使用 JSTL fmt:message
【发布时间】:2018-09-02 02:48:42
【问题描述】:

我用谷歌搜索了以下问题,但找不到答案。它们是相互关联的,所以我将它们放在一个帖子中。我是一名使用 Eclipse IDE 的 Java 后端开发人员,在 Maven Spring 4 Java 项目中使用 JSTL fmt:message 标签。

问题 #1:

如果你有一个 jsp 文件,其中包含另一个 jsp 文件,那么 fmt 标签库在哪里?

问题 #2:

fmt:setBundle 标签可以有嵌套的 fmt:message 标签吗?

问题 #3:

message.properties 文件必须位于何处才能与 fmt:setBundle 标记一起使用?

【问题讨论】:

  • 社区非常感谢为编写自我答案而提出的问题,但我们也热衷于保持问答帖子之间的分离。您是否能够编辑此内容,以便在上面给出一个清晰且可回答的问题,而您的答案在下面?这样做的好处是有人可能会有更好的答案,而您甚至可能希望接受它而不是您自己的答案。
  • (这可能会被搁置,但如果您可以按照我描述的方式对其进行编辑,则可以重新打开它。谢谢!)
  • @halfer,已进行更改,请查看
  • 谢谢。我同意这更清楚,但答案仍然不在答案空间中,并且存在三个问题可能表明它太宽泛了。尽管如此,理论上离题的问题通常会通过给出答案来避免结束,无论如何我们鼓励在这里自我回答。我建议将每个Question X 设为标题,然后复制下面的答案(单击“回答您自己的问题”按钮)。然后每个Answer X 也可以作为答案帖子中的标题。
  • (如果您希望我对此进行建议的修改,加上答案,我可以这样做)。

标签: eclipse maven jstl bundle message


【解决方案1】:

答案#1:

如果您打算将 fmt:message 与 fmt:setBundle 和 fmt:setLocale 一起使用,您将需要 fmt 标签库。这很明显,我确信。但是,此外,如果您有一个 jsp 文件,其中包含另一个 jsp 文件,使用 jsp:includes 标记,并且包含的​​文件是包含 fmt 标记的文件,则 fmt 标记库进入包含的文件,而不是在包装文件中。

 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

答案#2:

我无法使以下工作。 Eclipse 说 fmt:setBundle 标记必须为空。但是,我确实在网络上看到了将 fmt:message 标记嵌套在打开和关闭 fmt:setBundle 标记中的示例。

<fmt:setBundle basename="message">
   <fmt:message key="name"/>
</fmt:setBundle>

见:https://www.baeldung.com/jstl

我能够得到以下工作。

<fmt:setLocale value="en_US" />
<fmt:setBundle basename="com.studypartner.properties.message" var="lang"/> // approach #1
<h1><fmt:message key="name" bundle="${lang}" /></h1>
<fmt:setBundle basename="message" var="lang"/> // approach #2
<h1><fmt:message key="name" bundle="${lang}" /></h1>

要使此代码 i18n,您可以从 language_COUNTRY 代码列表中将语言环境设置为您想要的任何内容,如果您有匹配的属性文件,上面的代码会将键“name”的值打印到页面上。例如,我创建了一个名为“message_en_US.properties”的属性文件。由于我将语言环境设置为“en_US”,并且基本名称的结尾是“message”,因此将找到我拥有的属性文件以及该文件中与 fmt:message 标记匹配的键“name”,将最终出现在上面的标签中。上面标签中关于“lang”的那部分似乎只是将捆绑包链接到消息所必需的。

见:https://www.tutorialspoint.com/jsp/jstl_format_message_tag.htm

以下是语言和国家/地区代码列表:

https://docs.oracle.com/cd/E13214_01/wli/docs92/xref/xqisocodes.html

答案#3:

好的,再次查看答案 #2 中“方法 #1”和“方法 #2”的代码。为什么我重复了?我想证明这两种方法都行得通。似乎将属性文件放在正确的位置很重要。但是,在 Maven Spring 3 Java Web 项目中,您可以将它定位在一些令人惊讶的位置,并且它适用于其中任何一个位置。看看下面链接中的项目设置:

project setup

首先,如果您没有 message_en_US.properties 文件,但您有 message.properties 文件,则 fmt:setBundle 标记仍然有效。此外,您可以将属性文件放在 3 个不同的位置,它仍然可以工作。

a) src/main/java > com.studypartner.properties

b) src/main/resources > com > studypartner > 属性

c) src/main/资源

“a”和“b”适用于

“c”适用于

当然,您可以将“com.studypartner.properties”替换为您自己的包名称(a、b)或嵌套文件夹的名称(c)。

基本上,当他们说属性文件必须在您的“类路径”上时,这就是他们的意思。

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 2011-03-05
    • 2015-12-11
    • 2012-08-08
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2019-01-19
    • 2011-06-02
    相关资源
    最近更新 更多