Теги JSF не отображаются как HTML

Я следую инструкциям Java EE firstcup, используя 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>

Right?

Хорошо, мой браузер получает 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>

Это файл my faces-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>

При этом:

Ответы

Ответ 1

SOLVED: изменение приветственного файла в web.xml на следующее решение проблемы:

<welcome-file-list>
    <welcome-file>firstcup/greetings.xhtml</welcome-file>
</welcome-file-list>

Ответ 2

Если теги 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">

Ответ 3

Следующий код в web.xml

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

вместо faces/* решил мою проблему без рендеринга jsf-тегов.

Примечание: *.html вызывает stackoverflow

Ответ 4

Проверьте либо ваш web.xml, либо ваш faces-config.xml. Что-то явно отсутствует.

изменить: Я не знаю jsf 2, но в моем jsf 1 faces-config.xml у меня есть это:

<application>
   <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>

Возможно, вам стоит взглянуть на это. (может быть намек, извините, я не могу больше помочь)

edit 2: это не ответ, извините

Ответ 5

Я также пострадал от проблемы jsf tags, а не отрисовывался вообще. Я использовал файл приветствия в web.xml как login/entry.xhtml.

Когда я изменил этот файл на faces/login/entry.xhtml, он работает хорошо.

Это должно быть связано с facesServelet is not intercepting страницей. Это приводит к рендерингу только простых тегов html и jsf, которые просто игнорируются.

Ответ 6

Это не относится к вам, но после нескольких часов поиска решения для подобной проблемы, мой виновник оказывается этим файлом в WEB-INF/faces-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, пути к классам, даже удаляя зависимости, и оказалось, что это один файл faces-config.xml:-P

Надеюсь, это поможет кому-то...

Ответ 7

Спасибо @hendy-irawan

Я решил свою проблему, изменив свой заголовок-config

Из

<?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>

Ответ 8

У меня была та же проблема. Я удалил несколько баннеров с богатыми интерфейсами из WEB-INF/lib и JSF теперь работает.