2

我们开发了 JSR 286 portlet。在 IE8 中加载 JSP 页面时,我们遇到了一些对齐问题,导致我们的屏幕无法正确加载。

我们可以弄清楚,这是因为 IE 8 的兼容性问题。默认情况下,页面在 IE8 中以 Quirks 模式加载。如果我们将模式更改为 IE8 标准,我们可以看到页面加载没有任何问题。我可以发现我们可以设置一个元<meta http-equiv='X-UA-Compatible' content='IE=EmulateIE8' />"来从 JSP 启用 IE8 标准模式。

但是如何将元标记添加到 portlet 页面的 head 元素中?由于我的 Web 应用程序中没有<html>,<head><body>标签,并且它将从 portlet 容器生成,我如何将元标签添加到 head 元素?

doHeader我也尝试按如下方式覆盖该方法

protected void doHeaders(RenderRequest request, RenderResponse response) {
    Element metaKeywords = response.createElement("meta");
    metaKeywords.setAttribute("http-equiv", "X-UA-Compatible");
    metaKeywords.setAttribute("content", "IE=EmulateIE8");
    // response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, ""); - I tried this option   also
   //response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, metaKeywords); - I tried this option also
}

但没有任何结果。

我们的应用程序在 WAS 7.0 上运行。

任何人都可以提供一些指示吗?

4

1 回答 1

0

好的,这对 OP 不再有用,但这是答案。

可以在 portlet 的“渲染生命周期阶段”执行此操作 — 用更普通的术语来说,可以通过覆盖来执行此操作GenericPortlet.doHeaders()

public class MyPortlet extends GenericPortlet {

    @Override
    public void doHeaders(RenderRequest req, RenderResponse res)
    throws PortletException {
        Element meta = response.createElement("meta");

        meta.setAttribute("http-equiv", "X-UA-Compatible");
        meta.setAttribute("content", "IE=EmulateIE8");

        response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, meta);
    }
}

如果您的门户是流式门户,您可能必须在 portlet.xml 上设置容器运行时选项:

<portlet>
    <container-runtime-option>
        <name>javax.portlet.renderHeaders</name>
        <value>true</value>
    </container-runtime-option>
</portlet>

(有关流媒体与缓冲门户的更多信息,以及一个很好的代码示例,请点击此处。)

另外,请注意,如果门户网站认为它存在安全风险,则可以随意忽略您的元素,但直到现在我还没有遇到问题。

我没有测试过这个特定的代码,但做了类似的事情(至少在冥王星上)并且它有效。因此,这些可能是很好的起点。

注意:JSR-362 (Portlet 3.0) 将有一个完整的 portlet 生命周期阶段,HEADER_PHASE. 在这种情况下,只需要实现renderHeaders(HeaderRequest, HeaderResponse). 但是这个规范还只是一个草案。

于 2016-07-07T14:48:12.737 回答