【问题标题】:FacesException: Expression Error: Named Object: xxx not found when located in WEB-INF/libs/FacesException: Expression Error: Named Object: xxx not found when located in WEB-INF/libs/
【发布时间】:2014-11-21 17:24:28
【问题描述】:

我有一个 JSF 2.2 组件,它在 WAR 项目中运行良好。 所以类文件被放入文件夹 WEB-INF/classes/com/test

但是当类被打包成一个 JAR 文件(来自另一个 Maven 项目)并且位于文件夹 WEB-INF/lib/example1.jar 中时,我会收到以下错误。

Caused by: javax.faces.FacesException: Expression Error: Named Object: HtmlHelloWorld not found.
    at com.sun.faces.application.ApplicationImpl.createComponentApplyAnnotations(ApplicationImpl.java:1933)
    at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:1168)

谁能解释我为什么会得到这个或如何解决它。

这是我的代码,并不是我认为它对问题有任何影响。

@FacesComponent(value = "HtmlHelloWorld")
public class HtmlHelloWorld extends UIComponentBase {
    @Override
    public String getFamily() {
        return null;
    }

    @Override
    public void encodeAll(FacesContext context) throws IOException {
    }
}

我还应该补充一点,我在 JAR 的根目录中有一个“faces-config.xml”。不过这没什么区别。

faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
              version="2.0">

  <application>
    <resource-bundle>
      <base-name>i18n</base-name>
      <var>bundle</var>
    </resource-bundle>
    <locale-config>
      <default-locale>en</default-locale>
      <supported-locale>en</supported-locale>
      <supported-locale>fr</supported-locale>
      <supported-locale>de</supported-locale>
    </locale-config>
  </application>

</faces-config>

【问题讨论】:

    标签: java maven jsf primefaces jsf-2.2


    【解决方案1】:

    我的 faces-config.xml 没有位于 META-INF 文件夹中

    Project
    | src
    | | main
    |   | java
    |     | com.test.TestFacesComponent
    |   | resources
    |     | META-INF
    |       | faces-config.xml
    

    参考:Oracle Doc 提取....

    JavaServer Faces 实现通过查找以下内容来查找文件:

    Web 应用程序的 /WEB-INF/lib/ 目录和父类加载器中的任何 JAR 文件中名为 /META-INF/faces-config.xml 的资源。如果存在具有此名称的资源,则将其作为配置资源加载。这种方法对于包含一些组件和渲染器的打包库是实用的。

    上下文初始化参数 javax.faces.application.CONFIG_FILES,它为您的 Web 应用程序指定多个配置文件的一个或多个(逗号分隔)路径。此方法最有可能用于企业级应用程序,这些应用程序将大型应用程序的每个部分的文件维护责任委托给不同的组。

    应用程序的 /WEB-INF/ 目录中名为 faces-config.xml 的资源。这是大多数简单应用程序使它们的配置文件可用的方式。

    【讨论】:

      猜你喜欢
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 2014-05-13
      • 2019-04-16
      • 2018-09-15
      • 1970-01-01
      • 2011-04-18
      相关资源
      最近更新 更多