我有几个 portlet,每个 portlet 在单个 Web 应用程序中使用汇集的 CSS 和 JS 文件的聚合。目前每个portlet 都会在doHeaders() 中添加适当的head 标签。但是,当多个 portlet 位于同一页面上时,这会导致头部中出现重复的标记。
目前,portlet 部署在运行于 GateIn的eXo上。eXo 有它自己的 JS AMD 框架和 portlet 皮肤系统,但我们使用 doHeaders() 添加头元素以尽可能地与平台无关以降低风险。
头元素以下列方式添加:
@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 来替换每个单独的 portlet 的 doHeaders() 方法,并将整个 CSS 和 JS 池添加到头部。但是我不能确保这个逻辑只会在每个用户会话页面呈现时运行。