Warm tip: This article is reproduced from serverfault.com, please click

jsp-fmt:message打印带有问号的密钥,例如“ ??? login.label.username ???”。

(jsp - fmt:message prints key with question marks like so "???login.label.username???")

发布于 2015-06-03 10:49:14

我正在尝试使用基于如何使Java Web应用程序国际化的JSTL 1.2使我的网站国际化。这是JSP文件的开头:

<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}" scope="session" />
<fmt:setLocale value="${language}" />
<fmt:setBundle basename="com.bundle.test" />
<html lang="${language}">

这是test.properties文件:

login.label.username = Username
login.label.password = Password
login.button.submit = Sign in
login.label.direction = rlt

在正文中,我包括了以下几行:

<label for="username"><fmt:message key="login.label.username" /></label>

但是,当我在浏览器中打开JSP页面时,它的输出如下:

``login.label。用户名''

我希望它输出值“ Username”。

这是怎么引起的,我该如何解决?

Questioner
Kingo Mostafa
Viewed
11
BalusC 2015-06-04 01:43:58

消息格式???key???表示无法找到与密钥关联的消息。这可能意味着你键入了密钥,或者捆绑文件中没有密钥,或者甚至整个捆绑文件都没有作为运行时类路径中的资源。

鉴于该密钥看起来不错并且存在于捆绑文件中,这仅意味着webapp找不到捆绑文件作为类路径资源。

鉴于你正在使用Maven,因此应确保已将它们放置在/src/main/resources文件夹中。在特殊情况下,束名称为com.bundle.test,则应该在该位置/src/main/resources/com/bundle/test.properties确切地有一个文件。

如果那仍然不起作用,那么很好,你的构建可能已变脏或损坏。清洁并重建以确保。然后使用一些ZIP工具提取Maven生成的WAR文件并浏览其内容。它最终应该最终存放在/WEB-INF/classes像这样的文件夹中/WEB-INF/classes/com/bundle/test.properties