WebLogic и рендеринг вложенных плиток — статическое содержимое игнорируется

У нас есть большое веб-приложение, некоторые из которых используют плитки Apache, местами сильно вложенные. Во всех протестированных контейнерах веб-приложений (Tomcat, JBoss, JonAs и, я думаю, WebSphere) проблем не было, однако на WebLogic у нас проблемы.

В WebLogic наши вложенные плитки не отображаются должным образом; визуализируется только динамический контент со сценарием на стороне сервера, весь статический контент (т. е. обычный HTML-контент) игнорируется. Почему это?

Сведения о среде:

  • ОС: Windows и Solaris (кажется неактуальной)
  • Java-версия: 6
  • Веб-логика: 11gR1
  • Плитки Apache: 2.2.2

Проблема может быть вызвана неправильным использованием плиток и тем, как они должны быть вложены, если это так, пожалуйста, дайте мне знать, но в идеале, из-за степени этого, возможно, неправильного использования, мы хотели бы найти обходной путь.

Мы попытались изменить кодировку символов, чтобы избежать использования WebLogic JSPWriter (при быстром просмотре исходного кода выбор JSPWriter зависит от настроек кодировки символов). Изменение кодировки на комбинацию UTF-8 и UTF-16 (что было неправильно и ломало вещи в других контейнерах) устранило проблему WebLogic, потому что она больше не использовала JSPWriter WebLogic (и все, что с ним связано).

Пример ВОЙНЫ:

Я привел очень простой пример, демонстрирующий эту проблему:

Самый важный файл для объяснения; displayTable.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<div id="displayTable" class="displayTable">
    <p><%= "This gets printed" %></p>   
    <!-- But this doesn't... -->
    <table>
        <tbody>
            <tr>
                <td>This doesn't</td>
                <td>1</td>
            </tr>
            <tr>
                <td>get printed</td>
                <td>2</td>
            </tr>
            <tr>
                <td>...no it doesn't</td>
                <td>3</td>
            </tr>
        </tbody>
    </table>
</div>

Страница, которая импортирует displayTable.jsp; test.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertDefinition name="pageTemplate">
    <tiles:putAttribute name="pageContent">
        <div>
            <p>Test</p>
        </div>
        <div>
            <tiles:insertDefinition name="displayTable" />
        </div>      
    </tiles:putAttribute>
</tiles:insertDefinition>

Шаблон страницы; pageTemplate.jsp:

Если test.jsp не оборачивать содержимое с помощью этого файла, то все работает...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:useAttribute name="pageContent" />
<html>
    <head>
        <title>Testing WebLogic and nested tiles</title>
    </head>
    <body>
        <tiles:insertAttribute name="pageContent" />
    </body>
</html>

Источник вышеперечисленного:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
        <title>Testing WebLogic and nested tiles</title>
    </head>
    <body>  
        <div>
            <p>Test</p>
        </div>
        <div>   
            This gets printed?
        </div>
    </body>
</html>

Я могу предоставить остальную часть содержимого WAR, если требуется, пожалуйста, спрашивайте.


person Ed .    schedule 01.05.2012    source источник
comment
Я так понимаю - вы видите какую-то логику в том, что рендерится, а что нет? Мне в вашем примере displayTable.jsp 1-я, 2-я и 3-я строки таблицы кажутся одинаковыми с точки зрения вложенности, но печатается только 1 строка.   -  person matt freake    schedule 01.05.2012
comment
Да, было бы верно сказать, что любые скриптлеты в displayTable.jsp будут отображать выходные данные, поэтому печатается 'Это будет напечатано?', но HTML-код таблицы полностью игнорируется. Однако я должен подчеркнуть, что это не ограничивается сценариями, JSTL <c:out var'${whatever}' /> также будет отображаться.   -  person Ed .    schedule 01.05.2012
comment
возможный дубликат вложенных шаблонов с плитками   -  person Paul Sweatte    schedule 07.10.2014