在整个互联网上浏览后,我最终提出了这个问题,尽管我觉得有点难以描述情况。
我有一个小应用程序,它在嵌入式Tomcat服务器(v7)上运行,并使用servlet和JSP;我试图使用JSTL标记对它们进行国际化。最终的项目部署为JAR文件,当我从控制台使用java -jar
运行它时,内嵌服务器正常启动,一切都很好。
问题是,当我尝试在IDE(我使用IntelliJ Idea v13.1.2)中运行它时:它再次启动,但页面显示的值不是来自bundle,而是像"???default.username???"这样的值。
这里是我的JSP大多数情况下的样子:
<!DOCTYPE html>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<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="messages" scope="session" var="bund"/>
<html>
<head>
<title><fmt:message bundle="${bund}" key="default.title" /></title>
<link rel="stylesheet" type="text/css" href="../css/tdb.css" media="all">
</head>
等等。 当我使用JAR时,<fmt:message bundle="${bund}" key="default.title" />
和类似的部分完美地工作,并导致从IDE中获得 ???default.title??? 的结果。 在某种情况下,我从servlet中使用bundle文件,并且当从JAR运行时,它可以正常工作,而当从IDE中运行时,它会导致java.util.MissingResourceException
。
我到目前为止尝试了什么? 我在各种位置中添加了我的messages.properties和messages_en_US.properties文件(在资源文件夹中,与java和webapp文件夹处于相同级别;在com.my.example包中的单独包中;作为简单的属性文件在com.my.example包中),尝试只使用基本名称引用它(resourceBundle = ResourceBundle.getBundle("messages", locale);
),或者使用完全限定路径;还设置了web.xml文件中的fallbackLocale和localizationContext参数。
我错过了什么?