我正在尝试使用taglib从JSTL中读取“属性文件”,但我无法访问它
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt"%>
我已经在web.xml中正确找到了tld文件,我确定这个
<taglib>
<taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/lib/fmt.tld</taglib-location>
</taglib>
属性文件名是msg。特性
<fmt:bundle basename="msg">
<fmt:message key="error.more" />
</fmt:bundle>
我一直在
???error.more???
而不是属性文件中的消息
我认为问题在于找到属性文件, 或者在
中的基本名称中<fmt:bundle basename="msg">
我应该在哪里找到属性文件,如何在代码中引用它?
谢谢大家
答案 0 :(得分:9)
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt"%>
这是错误的URI。这适用于旧的JSTL 1.0,它长期失效。对于JSTL 1.1,您应该使用http://java.sun.com/jsp/jstl/fmt
。
我已经在web.xml中正确找到了tld文件,我确定这个
<taglib> <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri> <taglib-location>/WEB-INF/lib/fmt.tld</taglib-location> </taglib>
修复taglib URL时,这是不必要的。从web.xml
中删除它,并删除所有这些松散的TLD文件。您应该在jstl.jar
中拥有standard.jar
和/WEB-INF/lib
。或者当您使用JSTL 1.2时,只需jstl-1.2.jar
。没有什么需要做的了。
属性文件名是msg。特性
<fmt:bundle basename="msg"> <fmt:message key="error.more" /> </fmt:bundle>
我一直在
???error.more???
而不是属性文件中的消息我认为问题在于定位属性文件,或者在
<fmt:bundle basename="msg">
中的基本名称中我应该在哪里找到属性文件,以及如何引用它在代码?
将它放在类路径中。在您的特定情况下,使用基本名称msg
,您需要将msg.properties
文件放在类路径的根目录中。
答案 1 :(得分:3)
尝试
< fmt:bundle basename="msg"/>
< fmt:message key="error.more" />
答案 2 :(得分:2)
1)我应该在哪里找到属性文件? 您必须将属性文件保存在src目录中。例如,您有两个英语和丹麦语属性文件,名为
Messages_en.properties
Messages_da.properties
在名为like
的包中com.isuru.test.i18N.resources
2)如何在代码中引用它?
<fmt:setLocale value="en" scope="session"/>
<fmt:bundle basename="com.isuru.test.i18N.resources.Messages" scope="session">
<fmt:message key="error.more" />
这将打印英文相关按摩
答案 3 :(得分:1)
正如Isuru所说,你必须把属性文件放在一个包中,就像你在谈论一个类一样。
我遇到了一个奇怪的问题,我一直在正确引用我的属性文件,但从未得到正确的输出,我发现你必须遵循属性包的相同包名格式,所以如果你有包:
com.test.clients
com.test.stores
您必须创建以下内容:
com.test.i18n
你不能做
other.test.i18n
您可以在此处存储您的媒体资源
error.more.properties
error.more_es_MX.properties
然后像往常一样引用它们:
<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.example.i18n.text" />
<fmt:message key="error.more" />
此处有关如何使您的网络应用程序国际化的绝佳答案
如何国际化java Web应用程序How to internationalize a Java web application?
答案 4 :(得分:-1)
这可以通过以下步骤完成。我将messages_en.properties文件放在src / main / resources文件夹下,并使用下面的代码引用属性文件。我没有考虑任何本地化,所以没有提到与此相关的任何内容。
在jsp中引用JSTL fmt uri。&lt;%@ taglib prefix =“fmt”uri =“http://java.sun.com/jsp/jstl/fmt”%&gt;
请参阅jsp中的包。 &LT; fmt:bundle basename =“messages_en”&gt;