是否有人链接到一个简明的摘要,说明什么使得portlet“符合JSR-286”而不仅仅是“符合JSR-168”。我有一个规范的副本,这是简洁的,所以链接规范不是一个有用的答案。我已经在网上搜索了一个小时,我发现没有什么是清楚的(除了规范,当然要求你也阅读以前的规范,然后从“必需”中删除“新功能”合规性”。
特别是我发现有很多关于web.xml的必要性的混淆,这似乎来自使用Liferay的人,而没有意识到Liferay正在为他们放入web.xml。
Do JSR-286 portlets require a web.xml file in their WAR files?
我真正喜欢的是包含以下一个或多个列表的内容:
您可以在列表中留下“使用portlet-app_2_0.xsd”,因为我认为这部分很明显。
我愿意接受这样的答案:除了portlet.xml的DTD / xsd之外,两个列表都是空的,区别仅在于门户网站支持的内容,但请用链接或其他引用来支持该断言。
我关心的原因是我在Liferay中看到有关Vaadin portlet的帖子暗示某些功能不适用于JSR-168 portlet ......也可能是Liferay中的某些逻辑基于哪个版本的portlet.xml进行切换它看到了,但我还没有证实,这也是有趣的信息,但不是我的问题的答案。
答案 0 :(得分:3)
JSR 286规范(Portlet 2.0)不会破坏与JSR168(Portlet 1.0)的二进制兼容性。这意味着针对Portlet 1.0规范编写的所有portlet都可以保持不变。此规则的唯一例外是:
在调用getWriter或getOutputstream之前不再需要对于包含的servlet / JSP,
renderResponse.setContentType
。在JSR168中,调用getWriter或getOutputstream而不事先设置内容类型导致IllegalStateException。
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的新东西(除了使用其他服务之外),我会在这里开始我的答案列表。
必须做:
不能做:
结果是,如果您只是转换您的portlet.xml,那么您现在“符合286”,除非您依赖于第二个列表中的两个项目用于您的程序流程。我找不到任何其他内容,但如果有人为这些列表找到了其他项目,请进行修改。