Это слушатель, поскольку JSF 1.x должен автоматически регистрироваться файлом определения библиотеки тегов jsf_core.tld
.Вы можете найти его в папке /META-INF
файла JAR реализации JSF.В случае Mojarra 2.1.3 (который вы, кажется, используете согласно журналам), слушатель регистрируется следующим образом из строки 80 и далее:
<!-- ============== Configuration Listener ============== -->
<!--
This ServletContextListener initializes the runtime environment
of the JavaServer Faces Reference Implementation when a web
application including it is initialized by the container.
-->
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
Однако, это, очевидно, не было правильно подобранона причале.Я также где-то читал, что когда FacesServlet
инициализируется до файла TLD, то вы также получите именно это исключение.Возможно, это происходит в Причал.Чтобы исключить одно и другое, попробуйте удалить запись <load-on-startup>
, чтобы она загружалась только при первом конкретном HTTP-запросе, намного позже обработки TLD.В любом случае, явная регистрация слушателя в web.xml
действительно должна решить эту проблему.
Далее, поскольку JSF 2.x, в дополнение к файлу TLD, слушатель также должен автоматически регистрироваться реализацией ServletContainerInitializer
в файле JAR для обхода проблемы.ошибка Glassfish 3В Mojarra 2.x это класс com.sun.faces.config.FacesInitializer
, который имеет следующие строки, начинающиеся со строки 131:
// The following line is temporary until we can solve an ordering
// issue in V3. Right now the JSP container looks for a mapping
// of the FacesServlet in the web.xml. If it's not present, then
// it assumes that the application isn't a faces application. In this
// case the JSP container will not register the ConfigureListener
// definition from our TLD nor will it parse cause or JSP TLDs to
// be parsed.
servletContext.addListener(com.sun.faces.config.ConfigureListener.class);
Это работает только в контейнерах Servlet 3.0, таких как Tomcat 7, Glassfish 3, Jetty 8 (предположительно!) и т. д. Вы, похоже, используете Jetty 8.0, который, таким образом, должен соответствовать Servlet 3.0, но ваш web.xml
объявлен как соответствующий Servlet 2.5, поэтому контейнер будет работать в режиме сбоя Servlet 2.5.Изменение web.xml
на соответствие сервлету 3.0 должно запустить этот инициализатор.