2013-04-02 3 views
3

Я новичок в Apache Sling, и я вижу во всех примерах, что он использует сценарии JSP для визуализации страниц.Apache Sling и скриптлеты

Серьезно? Есть ли способ использовать нормальный Java-код, а не технику, считающуюся устаревшей, и обескуражен самой Солнцем более 10 лет назад из-за всех недостатков, которые она представляет?

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

ответ

2

Если вам не нравятся скриптлеты, вы также можете использовать taglib и EL. Для краткого обзора см. the latest version of the TLD file в репозитории Sling SVN. Конечно, вы можете использовать Javascript, Groovy, Ruby или любой другой язык сценариев, поддерживаемый Sling.

Что касается библиотеки тегов, процитировать SLING-2648: Add Resource Access Tags, вы можете использовать их, чтобы сделать такие вещи, как

<c:set var="currentResource" value="${sling:getResource(resourceResolver,'/etc')}" /> 
<c:forEach var="child" items="${sling:listChildResources(currentResource)}"> 
    <c:if test="${child.name != 'jcr:content'}"> 
     <sling:getResource var="pageContent" path="${child.path}/jcr:content" /> 
     <sling:adapt adaptable="${pageContent}" adaptTo="org.apache.sling.api.resource.ValueMap" var="childProperties" /> 
     <sling:getProperty key="jcr:title" defaultValue="${child.name}" var="title" properties="${childProperties}" /> 
     <li><a href="${child.path}.html">Title: ${title}</a></li> 
    </c:if> 
</c:forEach> 
+0

Последняя версия ДВОЙ был переименована в слинг .TLD. Вот ссылки на [версия 1.3] (http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/resources/META-INF/sling.tld?revision=1494174&view = разметка) (начиная с переименования) и [ГОЛОВНОЙ] (http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/resources/META-INF/sling.tld ? view = разметка) (теперь установлено значение 1.4). –

0

Это, кажется, как с Apache Sling и производных продуктов, таких как Adobe CQ (или что она вызывается Теперь). Я согласен, что это приводит к плохо написанным JSP и трудно поддерживать программное обеспечение.

Использование JSTL, как описано Робертом Мунтяну, является первым шагом к созданию более чистого кода.

В моей текущей работе я написал фреймворк, который использует фильтры сервлета, чтобы вводить Java-классы в качестве «контроллеров» в JSP на основе их типа ресурса. Доступ к данным или функциям в них тривиален и делает для чистых (er) JSP.

А вот есть Slice framework Cognifide, который выглядит так, как будто он решает многие из этих проблем, но я никогда не использовал его.

1

Sling оставляет много свободы в том, как обрабатывать запросы и обрабатывать страницы. Вы можете использовать только Java-код, через службы OSGi и сервлеты обработки запросов, серверные скрипты, используя только различные языки и системы шаблонов, полную визуализацию на стороне клиента с использованием рендеринга JSON по умолчанию Sling или любую комбинацию этих методов.

Возможно, существует множество «субоптимальных» примеров, но вы можете очень сильно выбрать метод обработки и рендеринга запросов, который соответствует вашим потребностям.

0

Похоже, что вы новичок в OSGi в целом, поэтому вам нужно знать, как создавать сервисы. Если вы можете это сделать, вы можете создавать службы, которые реализуют javax.servlet.Servlet -

Это LINK - хороший обзор того, как вы будете формировать свои компоненты сервлета.

Как упоминал Бертран, Sling дает вам большую свободу, поэтому вам нужно будет играть с Sling, чтобы понять, как создавать приложения, используя свою методологию ресурсов и обработчиков ресурсов (помимо OSGi-сервисов).

1

Good Sling Devs больше не используют JSP. Это просто в документации и примерах, потому что это был стандарт так долго.

В JSP,, который вы справедливо видите как преступление (или анти-паттерна), содержат две вещи:

  • презентации
  • бизнес-логика

Они должны быть разделены в разные файлы ,

Для презентации

Используйте "красивый", который теперь называется "HTL". Читайте на них:

красивый современный каркас на стороне сервера презентации, правильно отделяет бизнес-логику от декларации представления, точно так же, как и любой другой структуры вы знакомы с такими, как Handlebars или FreeMarker, или даже с facelets.

Верно, это не синтаксис, используемый вне рамок Sling, поэтому он не является повторно используемым знанием, но вы действительно можете узнать его полностью через час, и он элегантный и гладкий.

Вы можете использовать любую другую логику представления вы хотите, в том числе

  • рули
  • Groovy GSP
  • Freemarker
  • ThymeLeaf

НО - ни один из них не будет работать «из из коробки ". Вам нужно будет найти подходящие «скриптовые движки» и установить их самостоятельно, или написать собственный скриптинг, который позволяет использовать их в Sling. Например, популярный продукт Adobe AEM, который является Sling, поставляется с ручкой scriptengine из коробки. Если вы готовы выполнять эту работу, вам доступны все рамки презентации под солнцем.

Для бизнеса-логика

Если вы пошли с красивым (акой HTL) для презентации, вы будете использовать «использовать» API, чтобы объявить, какой сценарий или класс готовит бизнес-логику для этой презентации. Здесь у вас есть практически только два варианта «из коробки»:

  • JavaScript (Примечание: на стороне сервера!)
  • Java

Целью является один из этих языков, чтобы обеспечить " поддерживая bean-тип ", которая получает данные для вас и подготавливает ее к представлению вашей презентации.Для того, чтобы ваши красивых презентации, чтобы объявить, который «боб» или скрипт он использует, вы используете «использование API» здесь:

https://docs.adobe.com/docs/en/htl/docs/use-api.html

Пример:

<div data-sly-use.bean="myscript.js">${bean.valueFromJavascript}</div> 

Теперь вы можете использовать МНОГО больше языков, чем это, но вам нужно написать какой-то пользовательский код, чтобы позволить Sling использовать эти альтернативные языки с помощью API-интерфейса. Например, я сейчас о, чтобы попытаться выяснить, как выставить заводной или Котлин посредством использования API, так что я могу сделать что-то вроде этого:

<div data-sly-use.bean="myscript.groovy">${bean.valueFromGroovy}</div> 
Смежные вопросы