Это может произойти, если вы указали для фактических файлов JSP расширение .jsf
.Другими словами, у вас нет файла inputname.jsp
в папке с веб-контентом, но на самом деле a inputname.jsf
файл.Это не верно.Эти файлы JSP должны иметь расширение .jsp
, чтобы их можно было обрабатывать JspServlet
.В противном случае эти файлы вообще не будут анализироваться как JSP и в конечном итоге будут отображаться в виде обычного текста в веб-браузере.
Вы изменили шаблон URL FacesServlet
вместо /faces/*
вместо (чем большерекомендуется) *.jsf
.Таким образом, вы должны изменить все URL-адреса в руководстве с /foo.jsf
на /faces/foo.jsp
, также в случаях перехода вперед / включения и навигации.Вы должны не изменить на /faces/foo.jsf
и использовать неверное расширение в реальных файлах.
Не связано с конкретной проблемой: есть ли какая-то конкретная причиначто вы читаете 6-летнее учебное пособие по JSF 1.1 вместо более свежего учебного пособия по JSF 2.0?JSF 1.1 имеет так много недостатков , а также унаследованная JSP была заменена Facelets 1,5 года назад.
Обновление согласно комментарию к вопросу:
@ cularis Это мой первый проект на самом деле.Я получил java.lang.ClassCastException: com.sun.faces.application.ApplicationAssociate cannot be cast to com.sun.faces.application.ApplicationAssociate
, и я нашел решение этой проблемы здесь и сделал это как сказано, и проблема была решена.Я использую JBoss 4.2.2 с JSF 1.2
Это исключение может произойти, если путь к классам во время выполнения загрязнен различными версионными библиотеками JSF.JBoss поставляется с уже встроенным JSF, поэтому вам не следует предоставлять библиотеки JSF в папке веб-приложения /WEB-INF/lib
.Если это другая версия, она может столкнуться с исключениями, как указано выше.
Обновление 2 согласно обновлению вопроса:
java.lang.NullPointerException
at com.sun.faces.taglib.jsf_core.ViewTag.doStartTag(ViewTag.java:162)
Ну, это противно, и я не видел его раньше.Держу пари, что это будет вызвано только загрязнением пути к классу.JBoss 4.2.x поставляется с уже встроенными JSF 1.2 и JSTL 1.1.Удалите библиотеки jsf * .jar и jstl * .jar из /WEB-INF/lib
.Пожалуйста, также удалите все связанные с JSF <context-param>
и <listener>
entires из web.xml
.Все те, которые вы пока используете, уже являются JSF 1.2 по умолчанию.Это может или не может решить вашу конкретную проблему, но это должно, по крайней мере, минимизировать шум.Дайте мне знать.
Обновление 3 согласно комментариям:
Я удалил банки и записи из web.xml, а также раскомментировалзакомментированная строка в jboss-4.2.2.GA/server/default/deploy/jboss-web.deployer/conf/web.xml и теперь я получаю java.lang.RuntimeException: Cannot find FacesContext
.Но предыдущая проблема решена
Гораздо лучше.Ошибка Cannot find FacesContext
имеет простую причину: FacesServlet
не был вызван.Таким образом, URL-адрес запроса или пересылки не соответствует шаблону URL FacesServlet
.Предполагая, что вы по-прежнему сопоставили свой FacesServlet
с шаблоном URL-адреса /faces/*
и что у вас есть физический файл /pages/inputname.jsp
в вашем веб-контенте, тогда все, что должен содержать index.jsp
, - это следующая строка (да, получитьизбавиться от всего, что не имеет значения HTML)
<jsp:forward page="faces/pages/inputname.jsp" />
Таким образом, просто вызов
http://localhost:8080/FBApp/
должен работать.Если это по какой-то причине (дайте мне знать), то, по крайней мере, вызов
http://localhost:8080/FBApp/faces/pages/inputname.jsp
должен работать.
Обновление 4 согласно комментариям:
Исключение FacesContext решено, но теперь оно выдает javax.faces.FacesException: java.net.MalformedURLException: Path faces-config.xml does not start with a "/" character.
Хм, это тоже ново для меня.Как теперь выглядит web.xml
?Это говорит о том, что у вас есть javax.faces.CONFIG_FILES
контекстный параметр с неправильным значением faces-config.xml
.Попробуйте вставить контекстный параметр javax.faces.CONFIG_FILES
со значением /WEB-INF/faces-config.xml
обратно в web.xml
.Возможно, JSF 1.2, используемый в JBoss, имеет какую-то ошибку, связанную с этим.