我们开发了JSR 286 portlet。在IE8中加载JSP页面时,我们遇到了一些对齐问题,因为我们的屏幕没有正确加载。
我们可以弄清楚,这是因为IE 8的兼容性问题。默认情况下,页面在IE8中以Quirks模式加载。如果我们将模式更改为IE8 Standard,我们可以看到页面加载没有任何问题。我发现我们可以设置一个元<meta http-equiv='X-UA-Compatible' content='IE=EmulateIE8' />"
来从JSP启用IE8标准模式。
但是如何将元标记添加到portlet页面的head元素中?由于我的Web应用程序中没有<html>
,<head>
和<body>
标记,并且它将从portlet容器生成,如何将元标记添加到head元素?< / p>
我尝试覆盖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上运行。
有人可以提供一些指示吗?
答案 0 :(得分: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。)
另外,请注意门户网站可以自由地忽略您的元素,如果它认为这是一个安全风险,但直到现在我都没有遇到任何问题。
我没有测试过这个特定的代码,但是做了类似的事情(至少在冥王星上)并且它有效。所以,那些可以是很好的起点。
注意:JSR-362(Portlet 3.0)将拥有整个portlet生命周期阶段HEADER_PHASE
。在这种情况下,只需要实现renderHeaders(HeaderRequest, HeaderResponse)
。但是这个规范还是草案。