java - 在 Websphere 门户中将元标记添加到 JSR 286 portlet 的头元素

标签 java websphere portlet jsr286

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

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

但是如何将 meta 标记添加到 portlet 页面的 head 元素中呢?因为我没有 <html> , <head><body>我的 web 应用程序中的标签,它将从 portlet 容器生成,我如何将 meta 标签添加到 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 上运行。

谁能指点一下?

最佳答案

好的,这对 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>

(更多关于流与缓冲门户的信息,以及一个很好的代码示例,here。)

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

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

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

关于java - 在 Websphere 门户中将元标记添加到 JSR 286 portlet 的头元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7845346/

相关文章:

ssl - 使用 wsimport 创建 SOAP 客户端,但无法使其与 SSL 证书一起使用

java - 我如何以编程方式使 Liferay Portlet 进入全屏模式

java - 如何使用 Spring MVC 在 session 范围内声明变量

java - 为什么 -9 & 0xaaaa 得到一个无符号的结果?

java - 简单的java程序根据它们的值来处理canopy簇字符串

java - 使用 Theme.Light.NoTitleBar 显示 Light AlertDialog

websphere - 处理/的 WebGroup/Virtual Host 尚未定义

java - 如何在 JPanel 中创建垂直 TitledBorder (javax swing)

java - 如何从 WAS 模块中删除类路径变量

java - Struts2 portlet 正在执行 Liferay 刷新的默认操作(而不是其当前操作)