2012-01-26 21 views
6

Có ai có một liên kết đến một bản tóm tắt ngắn gọn về những gì làm cho một portlet "JSR-286 tuân thủ" so với chỉ "JSR-168 tuân thủ". Tôi đã có một bản sao của spec và đó là bất cứ điều gì nhưng súc tích để liên kết các spec không phải là một câu trả lời hữu ích. Tôi đã tìm kiếm trên web trong một giờ và tôi đã không tìm thấy nội dung nào rõ ràng (ngoài thông số kỹ thuật, tất nhiên điều này yêu cầu bạn đọc thông số trước đó và sau đó loại bỏ "các tính năng mới" từ "bắt buộc Đặc biệt, tôi đã tìm thấy rằng có khá nhiều sự nhầm lẫn trên đó về sự cần thiết của web.xml, mà dường như đến từ những người sử dụng Liferay và không nhận ra rằng Liferay đang rơi vào một tệp tin web.xml cho . chúngĐiều gì làm cho một portlet JSR-286 tuân thủ?

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

những gì tôi thực sự muốn là một cái gì đó có chứa một hoặc nhiều các danh mục sau:

  • Những điều bạn phải làm với JSR-168 để làm cho JSR-168 tuân thủ các điều khoản JSR-286
  • Những điều bạn không được làm, sẽ khiến một portlet tuân thủ JSR-286 khác chỉ được xem là JSR-168.

Bạn có thể để "sử dụng portlet-app_2_0.xsd" khỏi danh sách, vì tôi coi phần đó là hiển nhiên.

Tôi mở cho câu trả lời rằng cả hai danh sách đều trống ngoài DTD/xsd cho portlet.xml và sự khác biệt chỉ ở cổng hỗ trợ, nhưng hãy quay lại xác nhận bằng liên kết hoặc tham chiếu khác . Lý do tôi quan tâm là tôi thấy các bài viết về các portlet của Vaadin trong Liferay có nghĩa là một số tính năng không có sẵn cho các portlet JSR-168 ... Nó cũng có thể là một số logic trong các switch Liferay dựa trên phiên bản portlet nào. xml nó thấy, nhưng tôi đã không xác nhận rằng một trong hai đó cũng sẽ là thông tin thú vị, nhưng không phải là câu trả lời cho câu hỏi của tôi.

+0

Đọc lại bài đăng trên diễn đàn mà tôi đã liên kết trong bình luận bên dưới, tôi đã nhận ra rằng mặc dù người đăng nói đang nói về "các portlet tương thích", anh ấy phân bổ sự khác biệt cho ApplicationPortlet2. Tôi đã mở rộng điều đó, vì vậy tôi đoán tôi có được những lợi ích mà anh ấy nói. Tuy nhiên, tôi vẫn tự hỏi liệu có bất kỳ ý nghĩa nào đối với cụm từ "portlet tuân thủ JSR 286" (ngoài các tính không tương thích ngược được đề cập bên dưới). – Gus

Trả lời

3

Theo this doc, nhưng nó cũng nêu tại jsr286:

Các JSR 286 spec (Portlet 2.0) không phá vỡ tính tương thích nhị phân với JSR168 (Portlet 1.0). Điều này có nghĩa là tất cả các portlet được viết dựa vào đặc tả Portlet 1.0 có thể chạy không thay đổi. Ngoại lệ duy nhất cho quy tắc này là:

renderResponse.setContentType không còn cần thiết trước khi gọi getWriter hoặc getOutputstream. Trong JSR168, gọi getWriter hoặc getOutputstream mà không cần thiết lập trước kiểu nội dung dẫn đến một IllegalStateException.

getProtocol đối với các servlet được bao gồm/JSP trả về ‘HTTP/1.1’, Trong JSR168, nó trả về giá trị rỗng.

Vì vậy, miễn là portlet jsr168 của bạn không phụ thuộc vào giá trị trả về getProtocol() bạn an toàn (ví dụ: mỗi portlet jsr168 là một portlet jsr286).

Bài đăng bạn thấy có vẻ hợp lý vì jsr286 là thông số mới hơn và có một số tính năng làm cho portlet jsr268 không phải là một portlet jsr168.

+0

Có, tôi đã nhìn thấy phần thông số đó và câu trả lời có một câu hỏi hơi khác. Điều đó trả lời câu hỏi "Liệu portlet có chạy trong cổng tương thích 286 không" Tuy nhiên tôi thấy mọi người nói về "286 portlet tương thích" có vẻ như 168 portlet có thể chạy, chúng được xử lý khác nhau bằng liferay: https: // vaadin. com/forum/-/message_boards/view_message/131405 # _19_message_151875 – Gus

+0

Câu trả lời của bạn chứa một phần câu trả lời của tôi, vì vậy tôi đã bình chọn cho bạn ngay bây giờ. Tôi vẫn đang cố gắng quyết định xem đó có phải là câu trả lời đầy đủ hay không. Tôi nghĩ rằng một phần của vấn đề là tôi đã bị lừa bởi cụm từ trong các bài viết khác, và tôi đã nghĩ rằng có một số khác biệt lớn hơn, vì vậy có lẽ không có nhiều câu trả lời cho câu hỏi của tôi ngay từ đầu. Nếu không ai có thể thêm vào danh sách của tôi dưới đây tôi có thể cung cấp cho bạn tín dụng mặc dù nó không phải là thông tin mới đối với tôi, mà là một cái gì đó tôi đã tìm thấy nhưng bỏ qua câu hỏi của tôi. – Gus

+0

vâng, nó rất gây hiểu nhầm. Dù sao tôi không nghĩ rằng bạn cần phải quan tâm đến jsr168 4 năm sau khi phát hành cuối cùng của jsr286, đặc biệt là trong bối cảnh liferay – soulcheck

1

Ok, Vì tôi không tìm thấy bất kỳ điều gì mới phân biệt portlet 2.0 từ portlet 1.0 (ngoài việc sử dụng các dịch vụ bổ sung và) tôi sẽ bắt đầu liệt kê câu trả lời của tôi ở đây.

Phải làm:

  1. Phù hợp với XSD 2.0 cho portlet.xml (xmlns = "http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd")

phải không làm:

  1. Dựa vào getWriter ném một ngoại lệ nếu renderResponse.setContentType chưa được gọi là nêu ra. (Có vẻ khó xảy ra anyway)
  2. Dựa vào getProtocol() trả về rỗng

Kết quả cuối cùng là, nếu bạn chỉ đơn giản là chuyển đổi portlet.xml của bạn, bây giờ bạn là "286 compliant" trừ khi bạn dựa vào hai mục trong danh sách thứ hai cho luồng chương trình của bạn. Tôi không thể tìm thấy bất kỳ điều gì khác, nhưng nếu ai đó tìm thấy một mục khác cho các danh sách này, vui lòng chỉnh sửa.