【问题标题】:"can't find bundle for base name" on JSF messages.propertiesJSF messages.properties 上的“找不到基本名称的捆绑包”
【发布时间】:2017-08-22 17:01:49
【问题描述】:

我正在做一个简单的基于 JSF 的项目(请参阅 this image 以查看项目结构)但我无法弄清楚为什么 faces-config 无法访问消息。

这是“faces-config.xml”中引用“Messages.properties”文件的一段代码:

    <application>
      <message-bundle>br.com.teste.primeiraaplicacaojsf.web.i18n.Messages</message-bundle>
      <locale-config>
        <default-locale>pt_BR</default-locale>
      </locale-config>
    </application>

这是在浏览器上生成的错误消息:

HTTP Status 500 - Can't find bundle for base name br.com.teste.primeiraaplicacaojsf.web.i18n.Messages, locale pt_BR

type Exception report

message Can't find bundle for base name br.com.teste.primeiraaplicacaojsf.web.i18n.Messages, locale pt_BR

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Can't find bundle for base name br.com.teste.primeiraaplicacaojsf.web.i18n.Messages, locale pt_BR
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause

java.util.MissingResourceException: Can't find bundle for base name br.com.teste.primeiraaplicacaojsf.web.i18n.Messages, locale pt_BR
    java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
    java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
    java.util.ResourceBundle.getBundle(ResourceBundle.java:1082)
    javax.faces.component.MessageFactory.getMessage(MessageFactory.java:161)
    javax.faces.component.MessageFactory.getMessage(MessageFactory.java:251)
    javax.faces.component.UIInput.validateValue(UIInput.java:1149)
    javax.faces.component.UIInput.validate(UIInput.java:982)
    javax.faces.component.UIInput.executeValidate(UIInput.java:1248)
    javax.faces.component.UIInput.processValidators(UIInput.java:712)
    javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    javax.faces.component.UIForm.processValidators(UIForm.java:253)
    javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
    com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)

【问题讨论】:

  • 将您的 Messages.properties 重命名为 Messages_pt_BR.properties,请构建、部署并查看它是否有效。
  • @Bonifacio 错误仍然存​​在。完全一样。
  • @Kukeltje 它位于结构内的正确位置,但我不知道如何在部署后检查它是否仍然在该位置。
  • @Kukeltje 我仔细检查了一下,该文件位于结构内部提到的路径中,如我链接的图像所示。
  • 让您的构建系统生成一个 WAR 文件。这代表了部署。现在使用 ZIP 工具检查该 WAR 文件。捆绑文件在那里的正确位置? (在/WEB-INF/classes的包结构中)

标签: maven jsf resourcebundle


【解决方案1】:

由于某种原因,IntelliJ 项目资源管理器显示“Messages.properties”文件的路径,就好像它是一系列文件夹,而在幕后它只创建一个文件夹,整个路径作为它的名称。 通过重新制作资源文件夹中的文件夹结构解决了该问题(文件保持完全相同)。

【讨论】:

  • 是的,IntelliJ 创建的结构不是一组文件夹,而是一个名为 org.abc.def.messages 的文件夹,所有属性文件都在其中。这导致了这个问题。需要在 src/main/resources 下创建适当的文件夹,即 /org/abc/def/messages 并将 .properties 文件放在那里。
猜你喜欢
  • 2011-01-06
  • 2016-05-02
  • 2014-03-21
  • 2016-06-13
  • 2021-10-31
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
相关资源
最近更新 更多