是什么让portlet JSR-286兼容?

时间:2012-01-26 21:19:33

标签: liferay portlet vaadin jsr286 jsr168

是否有人链接到一个简明的摘要,说明什么使得portlet“符合JSR-286”而不仅仅是“符合JSR-168”。我有一个规范的副本,这是简洁的,所以链接规范不是一个有用的答案。我已经在网上搜索了一个小时,我发现没有什么是清楚的(除了规范,当然要求你也阅读以前的规范,然后从“必需”中删除“新功能”合规性”。

特别是我发现有很多关于web.xml的必要性的混淆,这似乎来自使用Liferay的人,而没有意识到Liferay正在为他们放入web.xml。

Do JSR-286 portlets require a web.xml file in their WAR files?

我真正喜欢的是包含以下一个或多个列表的内容:

  • 您必须对JSR-168做的事情才能使其符合JSR-286标准
  • 您不能做的事情,这会导致JSR-286兼容的portlet仅被视为JSR-168。

您可以在列表中留下“使用portlet-app_2_0.xsd”,因为我认为这部分很明显。

我愿意接受这样的答案:除了portlet.xml的DTD / xsd之外,两个列表都是空的,区别仅在于门户网站支持的内容,但请用链接或其他引用来支持该断言。

我关心的原因是我在Liferay中看到有关Vaadin portlet的帖子暗示某些功能不适用于JSR-168 portlet ......也可能是Liferay中的某些逻辑基于哪个版本的portlet.xml进行切换它看到了,但我还没有证实,这也是有趣的信息,但不是我的问题的答案。

2 个答案:

答案 0 :(得分:3)

根据this doc,但jsr286中也提到了

  

JSR 286规范(Portlet 2.0)不会破坏与JSR168(Portlet 1.0)的二进制兼容性。这意味着针对Portlet 1.0规范编写的所有portlet都可以保持不变。此规则的唯一例外是:

     在调用getWriter或getOutputstream之前不再需要

renderResponse.setContentType。在JSR168中,调用getWriter或getOutputstream而不事先设置内容类型导致IllegalStateException。

     对于包含的servlet / JSP,

getProtocol返回'HTTP / 1.1',在JSR168中,它返回null。

因此,只要您的jsr168 portlet不依赖于getProtocol()返回的值,您就是安全的(即每个jsr168 portlet都是jsr286 portlet)。

您看到的帖子似乎是合乎逻辑的,因为jsr286是一个较新的规范,并且有一些功能使jsr268 portlet不是jsr168 portlet。

答案 1 :(得分:1)

好的,既然我没有找到任何区分2.0 portlet和1.0 portlet的新东西(除了使用其他服务之外),我会在这里开始我的答案列表。

必须做:

  1. 符合2.0 XSD for portlet.xml(xmlns =“http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd”)
  2. 不能做:

    1. 如果尚未调用renderResponse.setContentType,则依赖于getWriter抛出异常。 (无论如何似乎不太可能)
    2. 依赖于getProtocol()返回null
    3. 结果是,如果您只是转换您的portlet.xml,那么您现在“符合286”,除非您依赖于第二个列表中的两个项目用于您的程序流程。我找不到任何其他内容,但如果有人为这些列表找到了其他项目,请进行修改。

相关问题