大規模な Web アプリケーションがあり、その一部は、場所によっては大きくネストされたApache Tilesを使用しています。テストしたすべての Web アプリケーション コンテナー (Tomcat、JBoss、JonAs、および WebSphere だと思います) では問題はありませんでしたが、WebLogicでは問題がありました。
WebLogic では、ネストされたタイルが適切にレンダリングされません。動的なサーバー側のスクリプト化されたコンテンツのみがレンダリングされ、すべての静的 (つまりプレーンな HTML コンテンツ) は無視されます。どうしてこれなの?
環境の詳細:
- OS: Windows と Solaris (関係ないようです)
- Java バージョン: 6
- WebLogic: 11gR1
- アパッチ タイル: 2.2.2
この問題は、タイルの不適切な使用とそれらのネスト方法が原因である可能性があります。その場合はお知らせください。ただし、理想的には、この程度の不適切な使用のため、回避策を見つけたいと考えています。
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 コンテンツを提供できます。お問い合わせください。