Ошибка JSF 2.1: java.io.FileNotFoundException:*/*.xhtml не найден в ExternalContext

У меня ошибка в Jboss 7.0.2 "Arc", spring webflow 2.3.0.RELEASE с richfaces 4.0.0.Final (Myfaces 2.1.1):

12:34:19,729 СЕРЬЕЗНЫЙ [org.apache.myfaces.renderkit.ErrorPageWriter] (http--127.0.0.1-8080-2) Произошло исключение: javax.faces.FacesException: java.io.FileNotFoundException: /sections/login/ header.xhtml не найден в ExternalContext как ресурс.

когда я запускаю свою страницу login.xhtml:

<ui:composition template="/WEB-INF/flows/template/default.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich">

<ui:define name="windowTitle">
#{msgs.loginTitle}
</ui:define>

<ui:define name="heading">
<ui:include src="/sections/login/header.xhtml"/>
</ui:define>

<ui:define name="sidebarLeft">
<ui:include src="/sections/login/sidebarLeft.xhtml"/>
</ui:define>

<ui:define name="content">
<h:form>
   <h:panelGrid columns="2">
      #{msgs.namePrompt}
      <h:inputText id="name" value="#{user.name}"/>
      #{msgs.passwordPrompt}
      <h:inputSecret id="password" value="#{user.password}"/>
   </h:panelGrid>
   <p>
      <h:commandButton value="#{msgs.loginButtonText}"
                       action="planetarium"/>
   </p>
</h:form>
</ui:define>

The code of header.xhtml is:

  <html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets"> 
  <!--  <head><title>IGNORED</title></head> -->
  <body>
  <ui:composition>
     <div class="header">
        #{msgs.loginHeading}
     </div>
  </ui:composition>
  </body>
  </html>

файл структуры такой:

WEB-INF/flows/inscripcion
    inscripcion-flow.xhtml 
    inscripcion.xhtml    
    login.xhtml

WEB-INF/flows/sections/login
    header.xhtml
    sidebarLeft.xhtml

WEB-INF/flows/template
    template.xhtml

Почему эта ошибка? Я прикрепил свою подсказку Jboss.

https://rapidshare.com/files/817066879/log12.zip Спасибо.


person Vodo-Siosk Baas    schedule 30.09.2011    source источник


Ответы (1)


Кажется, вы поместили его в WEB-INF/flows/sections/login/header.xhtml. Исправьте src соответственно, чтобы соответствовать этому.

<ui:include src="/WEB-INF/flows/sections/login/header.xhtml"/>
person BalusC    schedule 30.09.2011
comment
Спасибо, это работает для меня, есть другой способ вызвать это (header.xhtml)??, и это правильное расположение в WEB-INF, потому что в учебнике JEE 6 говорится: веб-ресурсы - это любые программные артефакты, которые веб приложение требует для правильного рендеринга, включая изображения, файлы сценариев и любые библиотеки компонентов, созданные пользователем. Ресурсы должны быть собраны в стандартном месте, которое может быть одним из следующих. Ресурс, упакованный в корень веб-приложения, должен находиться в подкаталоге каталога ресурсов в корне веб-приложения: resources/resource-identifier. - person Vodo-Siosk Baas; 30.09.2011
comment
и Ресурс, упакованный в classpath веб-приложения, должен находиться в подкаталоге каталога META-INF/resources внутри веб-приложения: META-INF/resources/resource-identifier. - person Vodo-Siosk Baas; 30.09.2011
comment
Другой способ — использовать путь относительно текущего шаблона (т. е. не начинать с /). Но это не рекомендуется. Ресурсы — это статические файлы, такие как CSS, JS, изображения и т. д. Шаблоны можно идеально разместить в /WEB-INF. Он скрывает их от прямого доступа (вы не можете открыть http://localhost:8080/contextname/WEB-INF/* файлов через веб-браузер). - person BalusC; 30.09.2011