0

我们有一个大型 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 内容,请询问。

4

0 回答 0