【问题标题】:reading properties file from JSTL从 JSTL 读取属性文件
【发布时间】:2023-03-20 23:01:01
【问题描述】:

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

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

谢谢大家

【问题讨论】:

    标签: properties jstl taglib


    【解决方案1】:

    试试

       < fmt:bundle basename="msg"/>
       < fmt:message key="error.more" />
    

    【讨论】:

      【解决方案2】:
      <%@ 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 文件。 /WEB-INF/lib 中应该只有 jstl.jarstandard.jar。或者,当您使用 JSTL 1.2 时,只需 jstl-1.2.jar。无需再做任何事情。

      另见:


      属性文件名为 msg。属性

      <fmt:bundle basename="msg">
      <fmt:message key="error.more" />
      </fmt:bundle>
      

      我不断得到

      ???error.more???
      

      而不是属性文件中的消息,我认为问题在于找到属性文件,或者在&lt;fmt:bundle basename="msg"&gt; 中的基本名称中我应该在哪里找到属性文件,以及如何在代码?

      把它放在类路径中。在您的特定情况下,使用基本名称 msg,您需要将 msg.properties 文件放在类路径的根目录中。

      另见:

      【讨论】:

        【解决方案3】:

        1) 我应该在哪里找到属性文件? 您必须将属性文件保存在 src 目录中。例如,您有两个分别命名为英语和丹麦语的属性文件

        Messages_en.properties

        Messages_da.properties

        在一个像下面这样命名的包中

        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" />
        

        这将用英文打印相关的按摩

        【讨论】:

          【解决方案4】:

          正如 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?

          【讨论】:

            【解决方案5】:

            这可以通过以下步骤来完成。我将 messages_en.properties 文件放在 src/main/resources 文件夹下,并使用下面的代码引用了属性文件。我没有考虑任何本地化,所以没有提到任何与此相关的内容。

            1. 在jsp中引用JSTL fmt uri。

              李>
            2. 在 jsp 中引用包。

            3. 使用属性文件中定义的键。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-05-31
              • 2015-05-11
              • 1970-01-01
              • 1970-01-01
              • 2020-11-11
              • 2016-09-26
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多