我们有一个大型 Web 应用程序,其中一些使用Apache Tiles,这些应用程序在某些地方是严重嵌套的。在所有测试的 Web 应用程序容器(Tomcat、JBoss、JonAs 和我认为是 WebSphere)上都没有问题,但是在WebLogic上我们有问题。
在 WebLogic 上,我们的嵌套图块无法正确呈现;只有动态的服务器端脚本内容被渲染,所有静态(即纯 HTML 内容)被忽略。为什么是这样?
环境细节:
- 操作系统:Windows 和 Solaris(似乎无关紧要)
- Java 版本:6
- 网络逻辑:11gR1
- 阿帕奇瓷砖:2.2.2
该问题可能是由于不正确使用 Tiles 以及它们应该如何嵌套造成的,如果是这样,请告诉我,但理想情况下,由于这种情况,可能是不正确的使用,我们希望找到一种解决方法。
我们确实尝试更改字符编码以避免使用 WebLogic 的 JSPWriter(通过快速检查源代码,JSPWriter的选择取决于字符编码设置)。将编码更改为 UTF-8 和 UTF-16 的组合(这是错误的并且破坏了其他容器中的东西)修复了 WebLogic 问题,因为它不再使用 WebLogic 的 JSPWriter(以及它附带的所有内容)。
示例战争:
我制作了一个非常简单的示例来演示此问题:
最重要的解释文件;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 内容,请询问。