У нас есть большое веб-приложение, некоторые из которых используют плитки 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, если требуется, пожалуйста, спрашивайте.
displayTable.jsp
будут отображать выходные данные, поэтому печатается 'Это будет напечатано?', но HTML-код таблицы полностью игнорируется. Однако я должен подчеркнуть, что это не ограничивается сценариями, JSTL<c:out var'${whatever}' />
также будет отображаться. - person Ed .   schedule 01.05.2012