2017-03-17 15 views
6

Việc sử dụng bộ chọn trong Sling là gì?Bộ chọn trong AEM

http://www.resourcePath. selector .extension

Tôi đã đọc các tài liệu trực tuyến về cách sử dụng bộ chọn:

  1. Một số tài liệu nói rằng nó được sử dụng cho bộ nhớ đệm phản ứng từ một trang mà không thể được thực hiện khi sử dụng tham số truy vấn.

  2. Mặc dù một số gợi ý rằng Bộ chọn được sử dụng để trả lời các điều kiện khác nhau sử dụng cùng một tài nguyên. Ví dụ chúng tôi đã thực hiện một nơi trang (cq: page) là trang cuối cùng trong cấu trúc phân cấp, nó sẽ hiển thị cho phép nói một khối html trong khi nếu nó không phải là trang cuối cùng (tức là nếu nó có trang con), nó nên không hiển thị khối đã nói. Ở đây, chúng tôi đã sử dụng tập lệnh trong thành phần và thêm tên tập lệnh này vào URL làm công cụ chọn dựa trên điều kiện cho dù đó là trang cuối hay không.

Nhưng tôi không chắc điều nào là đúng.

Cảm ơn trước vì bất kỳ hướng dẫn nào.

Trả lời

7

Công cụ chọn là một dạng tham số đặc biệt cho URL. Cũng giống như một chuỗi truy vấn, nó ở đó để thay đổi hành vi của một yêu cầu/đáp ứng HTTP dựa trên tham số.

Chúng hầu hết phụ thuộc vào việc triển khai thực hiện nhưng quy ước chung là diễn giải chúng dựa trên vị trí.

Tốt ví dụ đơn giản sẽ được tree.json

tree.1.json (1 là chọn chiều sâu) chỉ là một cách khác để nói tree.json? Depth = 1

cây tương tự. 2.json là loại tree.json? Depth = 2

Về mặt ngữ nghĩa, điều này cho phép đường dẫn tuyệt đối không có chuỗi truy vấn và có thể được lưu trong bộ điều phối hoặc CDN (vì chúng không có? HoặC# modifiers). Hầu hết các proxy không lưu trữ các trang được tham số hóa (? Trong URL) nhưng bộ chọn hoạt động xung quanh quy tắc. Ngoài ra, điều này cho phép servlet xác định trước các giá trị bộ chọn (nếu được yêu cầu) và bỏ qua các tham số không cần thiết.

Trong ánh sáng của trên, đây là phản ứng trực tiếp các câu hỏi của bạn (bài chỉnh sửa):

Một số tài liệu nói rằng nó được sử dụng cho bộ nhớ đệm phản hồi từ một trang mà không thể được thực hiện khi sử dụng tham số truy vấn .

Vâng, đó là sự thật, đặc biệt nếu bạn đặt trong ngữ cảnh proxy ngược như Dispatcher (được khuyến nghị cho nhà xuất bản trong triển khai AEM điển hình). Theo mặc định, bỏ qua chuỗi truy vấn và làm mới bộ nhớ cache trên bộ điều phối. Bằng cách sử dụng bộ chọn, bạn có thể lưu bộ nhớ cache phản hồi trên bộ điều phối vì nó không khởi tạo bộ đệm ẩn. Nó thường là một thực hành tốt để sử dụng bộ chọn nếu phiên bản cơ sở của dữ liệu có thể được lưu trữ và bộ chọn phụ thuộc vào cùng một trạng thái.

Mặc dù một số gợi ý rằng Bộ chọn được sử dụng để phản hồi các điều kiện khác nhau bằng cùng một tài nguyên. Ví dụ chúng tôi đã thực hiện một nơi trang (cq: page) là trang cuối cùng trong cấu trúc phân cấp, nó sẽ hiển thị cho phép nói một khối html trong khi nếu nó không phải là trang cuối cùng (tức là nếu nó có trang con), nó nên không hiển thị khối đã nói. Ở đây, chúng tôi đã sử dụng tập lệnh trong thành phần và thêm tên tập lệnh này vào URL làm công cụ chọn dựa trên điều kiện cho dù đó là trang cuối hay không.

Nếu không nhìn vào mã, Tôi giả định này là một cái gì đó như:

page.last-page.html

nơi last-page là chọn bạn dùng để phân biệt các phản ứng. Đây là một cách để làm điều đó và miễn là trang có thể được lưu trữ, biến thể chọn này cũng có thể được lưu trữ mà không có bất kỳ vấn đề nào. Đây là cách sử dụng ngữ nghĩa của URL và tránh các vấn đề về bộ nhớ đệm. Nếu điều này được thực hiện như:

page.html?last-page=true

nó có thể không có được bộ nhớ cache thân thiện.

Sling có nhiều cách khác nhau để ràng buộc (giải quyết) một tập lệnh hoặc servlet tới một URL. Độ phân giải này được thực hiện dựa trên phần mở rộng, bộ chọn và/hoặc đường dẫn. Bạn có thể thêm chức năng mới vào bộ chọn hoặc phần mở rộng hiện có bằng cách tạo các servlet dựa trên bộ chọn mới mà không sửa đổi các servlet hiện có. Hãy xem xét một servlet ví dụ trả về dữ liệu JSON cho một đường dẫn (chúng ta biết điều này tồn tại OOTB trong AEM nhưng chỉ là một ví dụ).

content/mypage.json

trả về biểu diễn JSON của nút.

Bây giờ, giả sử bạn muốn có định dạng JSON mới gọn gàng hơn. Sử dụng chuỗi truy vấn truyền thống, bạn sẽ làm điều gì đó như

content/mypage.json?tidy=true

Điều này có thể không thực hiện được nếu bạn không có quyền truy cập vào mã nguồn của servlet gốc. Vì vậy, cách giải quyết sẽ là:

content/mypage.tidy.json

Đây có thể là một servlet mới mà chấp nhận chọn tidy và ghi đè hàm. Điều này làm cho bộ chọn mạnh mẽ khi nói đến độ phân giải kịch bản và mở rộng mã. Có, bạn có thể làm điều đó với các tham số truy vấn cũng nhưng sẽ có giới hạn trừ khi bạn sở hữu tất cả các mã.

+0

Vì vậy, điều này có nghĩa là các bộ chọn có cùng chức năng chính xác như một tham số truy vấn (tức là để chuyển các tham số cho một hàm). Nhưng sự khác biệt duy nhất là cách sử dụng bộ nhớ đệm của họ? –

+1

Tóm lại, vâng. Tuy nhiên, chúng không phải là một thay thế cho các tham số chuỗi truy vấn. URL của bạn vẫn có thể sử dụng tham số chuỗi truy vấn khi có các bộ chọn. Nó tăng cường bộ nhớ đệm và cung cấp (IMHO) một cấu trúc ngữ nghĩa tốt hơn cho URL. –

+0

Còn điểm 2 trong câu hỏi của tôi thì sao? Đó không phải là cách sử dụng chính của Selectors? –

Các vấn đề liên quan