从JSTL读取属性文件

时间:2010-11-25 07:53:09

标签: properties jstl taglib

我正在尝试使用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">

我应该在哪里找到属性文件,如何在代码中引用它?

谢谢大家

5 个答案:

答案 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文件夹下,并使用下面的代码引用属性文件。我没有考虑任何本地化,所以没有提到与此相关的任何内容。

  1. 在jsp中引用JSTL fmt uri。&lt;%@ taglib prefix =“fmt”uri =“http://java.sun.com/jsp/jstl/fmt”%&gt;

  2. 请参阅jsp中的包。 &LT; fmt:bundle basename =“messages_en”&gt;

  3. 使用属性文件中定义的键。 &LT; fmt:message key =“error.loginfailure”&gt;