- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几个 portlet,每个 portlet 在单个 Web 应用程序中使用合并的 CSS 和 JS 文件。目前每个 portlet 都会在 doHeaders() 中添加适当的 head 标签。但是,当同一页面上有多个 portlet 时,这会导致头部出现重复标记。
目前 portlet 部署在 eXo 上在 GateIn 上运行。 eXo 有它自己的 JS AMD 框架和 portlet 皮肤系统,但我们使用 doHeaders() 添加头部元素以尽可能与平台无关以减轻风险。
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,它可以去除重复的 head 元素。但我似乎无法从 RenderResponse 访问当前元素属性;我只能 setProperty() 或 addProperty()。
我还可以编写 RenderFilter 来替换每个单独的 portlet 的 doHeaders() 方法,并将整个 CSS 和 JS 池添加到头部。但我无法确保此逻辑仅在每次用户 session 页面呈现时运行。
最佳答案
我目前实现的一个解决方案是 RenderFilter,如果尚未写入池,它会将整个 JS 和 CSS 资源池写入头部。这有点次优,因为我发现检测挂起的头元素不是可以以独立于平台的方式完成的事情。然而,决定如何处理冗余的 head 元素完全取决于平台委托(delegate),因为 JSR-286 没有规定在这种情况下应该做什么。
通过使用 eXo 的 PortalRequestContext,可以获得待定头元素的列表。通过添加一个元元素来标识资源池,RenderFilter 可以决定该池是否需要写入或是否已经写入。
基本检测逻辑如下:
boolean addHeaderElements = true;
if (Util.getPortalRequestContext() != null && Util.getPortalRequestContext().getExtraMarkupHeaders() != null)
{
for (Element markupHeaderElement : Util.getPortalRequestContext().getExtraMarkupHeaders())
{
if (markupHeaderElement.getTagName().equalsIgnoreCase("meta") &&
markupHeaderElement.getAttribute("name") != null &&
markupHeaderElement.getAttribute("name").equalsIgnoreCase("project-name"))
{
addHeaderElements = false;
break;
}
}
}
这也可以写成在文件基础上操作,但我的 portlet 资源池通常共享到可以使用全有或全无方法的程度。
关于java - 从 doHeaders() 中删除重复的标题条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19796203/
我有几个 portlet,每个 portlet 在单个 Web 应用程序中使用合并的 CSS 和 JS 文件。目前每个 portlet 都会在 doHeaders() 中添加适当的 head 标签。但
当在 View 模式下点击 portet 时,portlet 容器将首先调用哪个方法..?会是 doHeader 还是 doView..? 最佳答案 javax.portlet.GenericPort
我知道 doHead 方法不会通过 http 发送正文,但是 doGet 也不会。两者之间有明显的区别吗?提前致谢。 最佳答案 简答 HEAD 只发回与相应 GET 请求相同的头信息,但没有实体主体。
我是一名优秀的程序员,十分优秀!