Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp fmt:消息打印带有问号的密钥,如“so”;???login.label.username???”;_Jsp_Localization_Jstl - Fatal编程技术网

Jsp fmt:消息打印带有问号的密钥,如“so”;???login.label.username???”;

Jsp fmt:消息打印带有问号的密钥,如“so”;???login.label.username???”;,jsp,localization,jstl,Jsp,Localization,Jstl,我正在尝试使用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=

我正在尝试使用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}">
在正文中,我包括以下几行:

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

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

??登录。标签。用户名

我希望它输出值“Username”


这是如何导致的,我如何解决它?

格式为
?key???
的消息意味着找不到与密钥关联的消息。这可能意味着您键入了密钥,或者密钥在bundle文件中不存在,甚至整个bundle文件在运行时类路径中作为资源不存在

鉴于密钥看起来不错,并且存在于捆绑包文件中,这只能意味着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

将此代码添加到my WEB.xml中解决了我的问题

<context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>messages</param-value>
</context-param>

javax.servlet.jsp.jstl.fmt.localizationContext
信息

如果这对任何人都有帮助,我在这个问题上陷入了困境。 在我的项目中,我有很多配置文件和属性文件,我的问题是我没有为所有配置文件添加密钥,因此,它给了我一个
???message.key???
错误。
在我将密钥添加到所有配置文件属性文件后,问题得到了解决。

如果某些消息被替换为
?????
,这意味着在配置的资源包中找不到消息密钥

确保在部署描述符(web.xml)中添加上下文初始化参数。这将建立一个资源包,从中可以加载本地化消息

<context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>test</param-value>
</context-param>

javax.servlet.jsp.jstl.fmt.localizationContext
测试
然后将test.properties文件放在IDE项目的source/production/resources目录中

<context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>test</param-value>
</context-param>