我们开发了 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/