Теги JSF не отображаются как HTML
Я следую учебному пособию по первой чашке Java EE, используя Netbeans и Glassfish.
Когда я выполняю веб-уровень JSF, который мне дали указание кодировать, браузер получает ту же разметку JSF, закодированную в файле.xhtml, и теги не отображаются как теги HTML. Я знаю это с помощью просмотра исходного кода в моем браузере.
Например, для этого кода:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Page title here</title>
</h:head>
<h:body>
<h2>
<h:outputText value="#{bundle.WelcomeMessage}" />
</h2>
</h:body>
</html>
Браузер должен получить что-то вроде:
<html ...>
<head>
<title>Page title here</title>
</head>
<body>
<h2>
the welcome message goes here
</h2>
</body>
</html>
Правильно?
Ну, мой браузер получает код jsf (первый фрагмент кода выше), а не код html (второй фрагмент кода выше).
Кажется, это проблема конфигурации у netbeans или glassfish, но не знаю что. Есть идеи?
Это мой файл web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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-app_3_0.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/firstcup/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>greetings.xhtml</welcome-file>
</welcome-file-list>
</web-app>
Это мой файл face-config.xml:
<?xml version='1.0' encoding='UTF-8'?>
<!-- =========== FULL CONFIGURATION FILE ================================== -->
<faces-config version="2.0"
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">
<application>
<resource-bundle>
<base-name>firstcup.web.WebMessages</base-name>
<var>bundle</var>
</resource-bundle>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>es</supported-locale>
</locale-config>
</application>
<navigation-rule>
<from-view-id>/greetings.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/response.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
Более того:
- URL, который я ввожу в браузере: http://localhost:8081/firstcup/, но я также пытался: http://localhost:8081/firstcup/greetings.xhtml
- Я проверил журналы Glassfish, и нет информации о невозможности загрузить FacesServlet
8 ответов
Решено: изменение файла приветствия в файле web.xml следующим образом решило проблему:
<welcome-file-list>
<welcome-file>firstcup/greetings.xhtml</welcome-file>
</welcome-file-list>
Если теги JSF не были проанализированы, то это просто означает, что запрос не был передан через FacesServlet
, Этот сервлет является ответственным за все эти вещи JSF. Вам необходимо проверить, соответствует ли используемый URL-адрес запроса url-pattern
из FacesServlet
, Обратите внимание, что он чувствителен к регистру.
Однако это также может произойти, если вы открыли файл прямо во встроенном браузере IDE. Ты не должен этого делать. Вы должны указать правильный URL-адрес самостоятельно в адресной строке встроенного браузера или внешнего браузера (например, MSIE/Firefox).
Обновление: еще одна вещь, вы объявили HTML-тег JSF в <html xmlns>
attribtue? Вы пропустили это в своем фрагменте кода.
Должно выглядеть
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
Следующий код в web.xml
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
вместо faces/*
решил мою проблему не визуализированных тегов JSF.
Замечания: *.html
вызывает переполнение стека
Проверьте либо ваш web.xml, либо файл face-config.xml. Что-то явно не хватает.
редактировать: я не знаю JSF 2, но в моем JSF 1 лица-config.xml у меня есть это:
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
Может быть, вы должны взглянуть на это. (может быть подсказка, извините, я не могу помочь дальше)
редактировать 2: это не ответ, извините
Спасибо @hendy-irawan
Я решил свою проблему, изменив заголовок лица-конфигурации
От
<?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_1_2.xsd"
version="1.2">
</faces-config>
к
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
</faces-config>
Возможно, это не относится к вам, но после нескольких часов поиска решения похожей проблемы мой виновник оказался в файле WEB-INF/face-config.xml:
<?xml version="1.0"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
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_1_2.xsd"/>
По какой-то странной причине JBoss Tools 3.3.0.M2 поместил этот файл в мой проект JSF 2.0 и BOOM! Ничего не работает Файл выглядит очень невинно, но все же (вероятно, из-за версии ="1.2") меня это очень расстроило.
Я искал журналы (ничего!), WEB-INF/lib, пути к классам, даже удаляя зависимости, и оказалось, что это один файл face-config.xml:-P
Надеюсь, это поможет кому-то...
Я также страдал от проблемы jsf tags
, не отображается вообще. Я использовал файл приветствия в web.xml
как login/entry.xhtml
,
Когда я изменил этот файл на faces/login/entry.xhtml
, это работает хорошо.
Это должно быть связано с facesServelet
является not intercepting
страница. Это приводит к отображению только простых тегов html, а jsf просто игнорируется.
У меня такая же проблема. Я удалил некоторые баночки richfaces из WEB-INF/lib, и JSF сейчас работает.