単一の Web アプリケーション内でプールされた CSS および JS ファイルの集合体を使用するポートレットがいくつかあります。現在、各ポートレットは適切な head タグを doHeaders() に追加します。ただし、これにより、複数のポートレットが同じページにある場合、head 内で重複タグが発生します。
現在、ポートレットはGateIn で実行されるeXoにデプロイされています。eXo には独自の JS AMD フレームワークとポートレット スキン システムがありますが、リスクを軽減するために、doHeaders() を使用して head 要素を追加し、可能な限りプラットフォームに依存しないようにしています。
head 要素は次の方法で追加されます。
@Override
public void doHeaders(RenderRequest request, RenderResponse response)
{
Element element = response.createElement("link");
element.setAttribute("type", "text/css");
element.setAttribute("rel", "stylesheet");
element.setAttribute("href", request.getContextPath() + "/service/resource/themes/stylesheet.css");
response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, element);
}
頭から重複したエントリを削除するか、そもそも重複が書き込まれないようにする必要があります。
重複したヘッド要素を削除できる共通の RenderFilter を作成しようとしています。しかし、 RenderResponseから現在の Element プロパティにアクセスできないようです。setProperty() または addProperty() しかできません。
RenderFilter を記述して、個々のポートレットの doHeaders() メソッドを置き換え、CSS および JS プール全体をヘッドに追加することもできます。しかし、このロジックがユーザー セッション ページのレンダリングごとにのみ実行されることを保証することはできません。