Adobe CQ — получение содержимого HTML из узла .jsp

Иметь .jsp файл под /components

путь выглядит так:
http://localhost:4502/apps/project-name/components/my-component/one.jsp

Можно ли получить HTML содержимое этого one.jsp по URL без создания узла содержимого?

что-то вроде:

http://localhost:4502/apps/project-name/components/my-component/one.HTML

содержимое .html необходимо для дальнейшего рендеринга.


person sergionni    schedule 11.11.2013    source источник
comment
IIUC содержимое .html необходимо для дальнейшего рендеринга означает, что HTML, который генерирует ваш JSP, предназначен для включения в другую страницу. В этом случае лучше использовать JSP-тег ‹cq:include›, который включает отображение ресурса. Конечно, это будет нацелено на ресурс Sling (контент или другой узел). Вы также можете включать JSP в другие JSP, как обычно, используя @include.   -  person Bertrand Delacretaz    schedule 12.11.2013
comment
Привет, Бертран, я понимаю твою точку зрения. Еще одно уточнение, чтобы быть более подробным: этот .html должен вызываться при нажатии на ссылку (например, <a href="this.html"/>). Я имею в виду, что это будет ссылка на html-контент jsp на другой странице jsp.   -  person sergionni    schedule 12.11.2013
comment
Итак, для этого рекомендуется создать узел содержимого, хотя бы для того, чтобы убедиться, что управление доступом обрабатывается правильно. Вы не хотите, чтобы ваши пользователи читали JSP в целом, поэтому рекомендуется размещать фактический контент где-то еще, кроме как в /apps.   -  person Bertrand Delacretaz    schedule 12.11.2013


Ответы (3)


Насколько я знаю, вы не можете получить html-контент из JSP напрямую, указав путь к файлу jsp. Он отображает содержимое в JSP без компиляции.

Один из возможных способов — создать узел nt:unstructured со свойством sling:resourceType, для которого задан путь к jsp (что-то вроде приведенного ниже).

test: {
    sling:resourceType: "/apps/geometrixx/components/title/one.jsp",
    jcr:primaryType: "nt:unstructured"
}

И вы можете указать путь к тестовому узлу, чтобы получить html, отображаемый jsp.

/apps/geometrixx/components/title/test
person rakhi4110    schedule 12.11.2013
comment
привет, спасибо за ответ, такой подход вызывает у меня ошибку: имя инжектора Guice недоступно. - person sergionni; 12.11.2013
comment
@sergionni Используете ли вы структуру Slice? Приведенный выше пример работает на моем сервере (нет слайса). Не могли бы вы предоставить больше информации об ошибке, чтобы мы могли ее выяснить? - person rakhi4110; 12.11.2013
comment
да, Слинг. ошибка выглядит так: Caused by: java.lang.IllegalStateException: Guice injector name not available at com.cognifide.slice.api.tag.SliceTagUtils.getFromCurrentPath(SliceTagUtils.java:73) ... - person sergionni; 12.11.2013
comment
похоже, что параметр appName из метода SliceTagUtils.getFromCurrentPath пуст. Что означает этот параметр? - person sergionni; 12.11.2013

Ваш вопрос немного расплывчатый, но, насколько я понимаю, вы хотите получить html для всей страницы, что можно сделать, прочитав входной поток из URL-адреса с помощью утилиты java.net.URL.

Может быть, вы также можете поместить iframe внутри другого jsp, чтобы получить содержимое.

person Sam Thadhani    schedule 11.11.2013
comment
я просто хочу выразить .jsp как чистый .html без создания узла в иерархии контента, чтобы получить доступ к этому .jsp, например: /one.html или другим подобным способом - person sergionni; 11.11.2013
comment
Нет бэкэнда, просто получайте html-контент по URL-адресу, вопрос в том, какой URL-адрес следует использовать. Спасибо за помощь. - person sergionni; 11.11.2013
comment
Как я уже сказал, вы можете использовать утилиту URL для чтения содержимого jsp как есть. ">Вот ссылка на то же самое. URL-адрес, который вы укажете здесь, может исходить от Externalizer< /а>. Обратитесь к методам API Externalizer publishLink // authorLink // absoluteLink. Externalizer можно использовать для настройки ссылок для различных сред. - person Sam Thadhani; 11.11.2013
comment
я имею в виду, могу ли я получить представление .html, например: /http://localhost:4502/apps/project-name/components/my-component/one.jsp/jcr:content/jcr:data или как-то иначе? - person sergionni; 11.11.2013

Вы всегда можете использовать традиционный файл .html вместо .jsp, но (возможно, очевидно) вы потеряете все возможности на стороне сервера, предоставляемые JSP.

Также стоит отметить, что анонимный доступ к /apps обычно запрещен из соображений безопасности, поэтому этот файл .html будет недоступен в экземпляре публикации с разрешениями OOTB.

person Bruce Lefebvre    schedule 11.11.2013