JSP:include не отображает включенный файл

Я только что создал новое приложение IceFaces и пытаюсь включить панель навигации на все страницы. Когда я использую тег jsp:directive.include, файл включается, но когда я использую jsp:include, он не загружается. На самом деле, когда я проверяю исходный код HTML в своем браузере, кажется, что включенный файл был полностью пуст. Я не хочу использовать jsp:directive.include, потому что он не будет автоматически отображать обновления включенного файла.

Моя среда: Eclipse 3.5, Tomcat 6, JSF 1.2, IceFaces 1.8.

Шаги для воспроизведения проблемы и куски кода:

  1. создайте новый динамический веб-проект со следующими параметрами: Целевая среда выполнения: Apache tomcat v6.0 Версия динамического веб-модуля: 2.5 Конфигурация: проект ICEfaces

  2. создайте новый файл ICEFaces JSPX — домашний файл. Некоторый код:

    <jsp:directive.page contentType="text/html;charset=ISO-8859-1" />
    
    
    <f:view >
        <ice:outputDeclaration doctypeRoot="HTML"
            doctypePublic="-//W3C//DTD HTML 4.01 Transitional//EN"
            doctypeSystem="http://www.w3.org/TR/html4/loose.dtd" />
        <html>
        <head>
        <title>test file</title>
        <link rel="stylesheet" type="text/css"
            href="./xmlhttp/css/rime/rime.css" />
        </head>
        <body>
            <jsp:directive.include file="./vertical_navigation.jsp" /> <!-- working -->
            <jsp:include page="./vertical_navigation.jsp" /> <!-- not working, no error though -->
        </body>
        </html>
    </f:view>
    

  3. create the file to be included, also as a new ICEFaces JSPX file. Simplified code:

        <ice:form>
            <ice:panelGrid columns="1" width="152">
            <ice:graphicImage url="./img/image.jpg"></ice:graphicImage>
            <ice:panelCollapsible expanded="true">
                <f:facet name="header">
                    <ice:panelGroup>
                        <ice:outputText value="Customer"/>
                    </ice:panelGroup>
                </f:facet>
                <ice:panelGrid columns="1">
                    <ice:commandLink action="customer"><ice:outputText value="Customer name" /></ice:commandLink>
                </ice:panelGrid>
            </ice:panelCollapsible>
        </ice:panelGrid>
        </ice:form>
        </body>
        </html>
    </f:view>
    

Some remarks:

  1. Я совершенно новичок в JSF, поэтому простите меня за любую очевидную ошибку.
  2. В домашнем файле (первом) я не использую оба тега одновременно. Я вставил оба здесь, чтобы показать, что я пробую оба варианта.
  3. Я создал оба файла как «JSPX-файл ICEFaces», но второму файлу было присвоено расширение .jsp.
  4. Когда я использую тег directive.include, загружается включенный файл. Но если я его изменю, он не будет автоматически переиздан.

person Paulo Guedes    schedule 03.10.2010    source источник


Ответы (1)


Для начала вы должны разделить и различить несколько технологий:

  • JSP — это технология просмотра на основе Java, которая позволяет вам писать HTML/CSS/JS и использовать taglibs для вызова бэкэнд-кода Java и/или управления потоком вывода.

  • JSPX — это то же самое, что и JSP, но вынуждает вас писать код в формате XML. Теги, специфичные для JSP, заменяются тегами в формате XML. JSPX также называют «документом JSP». Здесь представлен базовый учебник, в котором описываются различия в тегах.

  • JSF — это основанная на компонентах структура MVC, которая предоставляет компоненты в виде taglibs, которые выводят HTML/CSS/JS.

Вы не можете использовать <jsp:include> на странице JSPX. Вы должны преобразовать страницу JSPX в страницу JSP. Вам нужно переименовать файл .jspx в .jsp и заменить определенные теги JSPX на теги JSP. Вот пример запуска JSP с JSF/IceFaces:

<%@ page pageEncoding="ISO-8859-1" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://www.icesoft.com/icefaces/component" prefix="ice"%>
<!DOCTYPE html>
<f:view>
    <html lang="en">
        <head>
            <title>Title</title>
        </head>
        <body>
            <jsp:include page="include.jsp" />
        </body>
    </html>
</f:view>
person BalusC    schedule 03.10.2010
comment
причина для меня не ясна, но я нашел некоторую документацию, в которой говорится, что мы не должны использовать jsp:include в icefaces: icefaces.org/docs/v1_8_2/htmlguide/devguide/references2.html - person Paulo Guedes; 08.10.2010
comment
Потому что они настоятельно рекомендуют XML-разметку. Кстати, вы смотрели Facelets? Грубо говоря, это расширение JSPX и, начиная с Java EE 6, является преемником JSP. Есть <ui:include>. - person BalusC; 08.10.2010
comment
Да, я пытаюсь использовать Facelets, но я пока немного запутался. Во всяком случае, я больше не использую jsp:include. jsp:directive.include работает нормально, и обновление любого измененного файла не так важно. - person Paulo Guedes; 11.10.2010