AEM / Sling: Как мне реализовать динамический селектор Sling? - PullRequest
0 голосов
/ 08 мая 2018

TLDR : я хочу настроить страницу AEM, которая принимает имя и фамилию в качестве параметра, используя дружественный для SEO URL.

На веб-сайте www.host.com/mycontent.richard.williams.html будет отображаться информация, касающаяся Ричарда Уильямса.

Если я зайду на www.host.com/mycontent.john.smith.html, на странице будет отображена информация, относящаяся к Джону Смиту.


Пример для SEO : www.host.com/mycontent.richard.williams.html

пример не для SEO : www.host.com/mycontent.html?firstname=richard&lastname=williams


Итак, я следовал этому руководству (не уверен, что это лучший пример / руководство, чтобы помочь мне): http://www.aemcq5tutorials.com/tutorials/sling-servlet-in-aem/

И пока он хорошо работает для моего примера

@SlingServlet(resourceTypes="geometrixx/components/hompepage", selectors={"firstname","lastname"}, extensions="html",methods="GET", metatype=true)

Я пытаюсь сделать его динамичным.

В настоящее время я могу получить доступ к сервлету только при доступе через: http://localhost:4502/content/geometrixx/en.firstname.lastname.html

Я хочу сделать имя и фамилию динамическими параметрами / селекторами. Например, если я хочу передать значения «richard.williams», я могу использовать: http://localhost:4502/content/geometrixx/en.richard.williams.html

если я попытаюсь использовать http://localhost:4502/content/geometrixx/en.richard.williams.html прямо сейчас, я получу пустую страницу.

Так что в основном я хочу использовать селекторы для передачи значений параметров на мою страницу.

Есть идеи, как это можно сделать?

пс. На данный момент я тестирую / экспериментирую только в своем локальном экземпляре AEM.

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Технически это было бы возможно с использованием OptingServlet (см. https://sling.apache.org/documentation/the-sling-engine/servlets.html#optingservlet-interface)

Ваш метод accepts может легко распознать ожидаемый resourceType и реагировать соответствующим образом.

Как уже упоминалось в документах, такой подход не рекомендуется, и решение, предложенное Subhash для использования суффиксов, кажется более элегантным.

0 голосов
/ 20 марта 2019

Вы можете создать компоненты, которые будут читать селектор из запроса и добавить этот компонент в en.html

0 голосов
/ 08 мая 2018

Селекторы в слинге не обеспечивают функциональность размещения переменных в пути URL.то есть вы не можете добавить {pathParam}, как в Spring, в URL-адрес сервлета слинга.

В общем, селекторы не рекомендуется использовать как входные данные для функции.Они должны использоваться как расширения файлов.Например,Запрос к /mycontent.html возвращает тот же ресурс, что и /mycontent.mobile.html.Единственное отличие состоит в том, что последние запрашивают мобильную дружественную версию.

С другой стороны, параметры запроса служат для предоставления входных данных сервлету.


Я не могу думать ни о какомпрямой способ присоединения сервлета к динамическим путям в слинге.Вы можете попробовать использовать suffix, они кешируются в диспетчере, но я не могу комментировать SEO удобство использования suffix.

Учитывайте этот URI - /mycontent/user.json/john/smith

Зарегистрируйте сервлет, используя путь /mycontent/user, и вы можете использовать String[] names = request.getRequestPathInfo().getSuffix().split(suffix, '/') для получения содержимого суффикса.

Посмотритена ответы в этом вопросе .Слинг ResourceProvider и интеграция с jax-rs - это другие способы, которыми вы можете сделать это.

...