Теги 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>

Более того:

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 сейчас работает.

Другие вопросы по тегам