Liferay 什么使portlet JSR-286兼容?

Liferay 什么使portlet JSR-286兼容?,liferay,portlet,vaadin,jsr286,jsr168,Liferay,Portlet,Vaadin,Jsr286,Jsr168,有没有人链接到一个简明的摘要,说明是什么使portlet“符合JSR-286”而不是仅仅“符合JSR-168”的。我有一份规范的副本,但并不简洁,所以链接规范不是一个有用的答案。我在网上搜索了一个小时,没有发现任何清晰的东西(除了规范,当然这要求你也阅读以前的规范,然后从“要求的符合性”中删除“新特性”) 特别是我发现,对于web.xml的必要性存在相当多的困惑,这似乎是因为使用Liferay的人没有意识到Liferay正在为他们添加web.xml 我真正想要的是包含以下一个或多个列表的内容:

有没有人链接到一个简明的摘要,说明是什么使portlet“符合JSR-286”而不是仅仅“符合JSR-168”的。我有一份规范的副本,但并不简洁,所以链接规范不是一个有用的答案。我在网上搜索了一个小时,没有发现任何清晰的东西(除了规范,当然这要求你也阅读以前的规范,然后从“要求的符合性”中删除“新特性”)

特别是我发现,对于web.xml的必要性存在相当多的困惑,这似乎是因为使用Liferay的人没有意识到Liferay正在为他们添加web.xml

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

  • 要使JSR-168符合JSR-286,您必须对其进行一些操作
  • 您不能做的事情,这将导致一个与JSR-286兼容的portlet被认为只是JSR-168

你可以离开“使用PATROLT-APP22Y0.xSD”,因为我认为这一部分很明显。 我愿意回答,除了portlet.xml的DTD/xsd之外,这两个列表都是空的,区别仅在于门户支持什么,但请使用链接或其他引用来支持该断言

我关心的原因是,我在Liferay中看到了一些关于Vaadin portlet的帖子,这些帖子暗示JSR-168 portlet无法使用某些功能……也可能是Liferay中的某些逻辑根据它看到的portlet.xml版本进行切换,但我也没有确认这一点,因此这也是一个有趣的信息,但不是对我的问题的回答stion.

根据,但在:

JSR 286规范(Portlet 2.0)没有破坏与JSR168(Portlet 1.0)的二进制兼容性。这意味着根据Portlet 1.0规范编写的所有Portlet都可以不加更改地运行。此规则的唯一例外是:

renderResponse.setContentType
在调用getWriter或getOutputstream之前不再是必需的。在JSR168中,在未事先设置内容类型的情况下调用getWriter或getOutputstream会导致IllegalStateException

getProtocol
对于包含的servlet/jsp返回“HTTP/1.1”,在JSR168中,它返回null

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


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

好的,因为我没有发现任何新的东西将2.0 portlet与1.0 portlet区分开来(除了使用其他服务和服务),我将从这里开始列出我的答案

必须做到:

  • 符合portlet.xml的2.0 XSD(xmlns=”http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd))
  • 不得:

  • 如果尚未调用renderResponse.setContentType,则依赖getWriter引发异常。(无论如何似乎不太可能)
  • 依赖于返回null的getProtocol()

  • 结果是,如果您只是转换portlet.xml,您现在是“286兼容的”除非您的程序流程依赖于第二个列表中的两个项目。我找不到任何其他项目,但如果有人找到这些列表中的另一个项目,请编辑。

    是的,我看到了规范的这一部分,它回答了一个稍微不同的问题。这回答了“portlet是否在符合286标准的门户中运行”的问题然而,我看到人们在谈论“286兼容Portlet”这似乎表明,尽管168个Portlet可以运行,但liferay对它们的处理方式有所不同:你的答案包含了我答案的一部分,所以我现在投票给了你。我仍在努力确定它是否算作完整答案。我想部分问题是,我在其他帖子中受到了措辞的误导,我认为有一些错误更大的区别,所以我的问题一开始可能没有太多的答案。如果没有人能添加到我下面的列表中,我可能会给你评分,即使这对我来说不是新信息,而是我已经发现但从我的问题中遗漏的东西。是的,这非常误导。无论如何,我认为你不需要关心jsr168jsr286最终发布4年后,尤其是在liferay Context4中发布此问题时,我认为liferay可能不会提供服务,如果它认定我不符合“286标准”.我不认为这是一个问题,但是,我想我只是对那篇文章的措辞读得太多了。重新阅读我在下面的评论中链接的论坛帖子,我意识到尽管海报上说的是“兼容Portlet”他将差异归因于ApplicationPortlet2。我已经扩展了它,所以我想我得到了他提到的好处。但是,我仍然想知道“JSR286兼容portlet”这个短语是否有任何意义(除了下面提到的向后不稳定性)。