我是Apache Sling的新手,我在所有示例中都看到它使用JSP scriptlet来呈现页面。
我是认真的?有没有一种方法可以使用普通的java代码,而不是一种被认为过时的技术,10多年前,由于存在的所有缺点,Sun自己就不鼓励这种技术?
或者可能有一个模糊的原因,即使用scriptlet是实现的最佳选择,但我不知道这一点。
发布于 2013-04-03 02:04:05
如果你不喜欢scriptlet,你也可以使用taglib和EL。有关快速概述,请参阅Sling SVN存储库中的the latest version of the TLD file。当然,您可以使用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> 发布于 2013-04-03 14:56:27
Sling在如何处理请求和呈现页面方面留下了很大的自由度。您可以通过OSGi服务和请求处理servlets、仅使用各种语言和模板系统的服务器端脚本、使用Sling的默认JSON呈现的完整客户端呈现或这些技术的任意组合来使用Java代码。
可能会有许多“次优”的例子,但您可以选择适合您需求的请求处理和呈现方法。
发布于 2017-01-18 02:53:23
优秀的Sling开发人员不再使用JSP。它只是在文档和示例中,因为它是很长时间以来的标准。
您可以正确地将JSP视为一种犯罪(或反模式),它包含两件事:
这些文件需要分离到不同的文件中。
用于Presentation的
使用"Sightly“,现在称为”HTL“。请阅读以下内容:
Sightly是一个现代的服务器端表示框架,它正确地将业务逻辑与表示声明分离,就像您熟悉的任何其他框架一样,比如Handlebar或FreeMarker,甚至facelets。
诚然,它不是在Sling框架之外使用的语法,因此它不是可重用的知识,但您真的可以在大约一个小时内完全掌握它,而且它优雅而圆滑。
您可以使用任何其他表示逻辑,包括
但是--所有这些都不会“开箱即用”。您必须找到合适的“脚本引擎”并自己安装它们,或者自己编写一个脚本来在Sling中启用这些引擎。例如,广受欢迎的Adobe AEM产品Sling附带了一个现成的handlebars scriptengine。如果您愿意做这项工作,您可以使用太阳下的所有表示框架。
业务逻辑的
如果您使用Sightly (也称为HTL)进行表示,您将使用" use“api来声明哪个脚本或类为该表示准备您的业务逻辑。在这里,你实际上只有两个“开箱即用”的选择:
服务器Side!)
(注意:
目标是让这些语言中的一种提供“支持bean”类型的业务逻辑,该业务逻辑为您获取数据并准备好由您的演示呈现。为了让您直观的演示文稿声明它使用的是哪个"bean“或脚本,您可以在这里使用"use API”:
https://docs.adobe.com/docs/en/htl/docs/use-api.html
示例:
<div data-sly-use.bean="myscript.js">${bean.valueFromJavascript}</div>现在,您可以使用更多的语言,但是您必须编写一些自定义代码,以允许Sling通过use API使用这些替代语言。例如,我现在正试图弄清楚如何通过Use API公开groovy或Kotlin,这样我就可以这样做:
<div data-sly-use.bean="myscript.groovy">${bean.valueFromGroovy}</div>https://stackoverflow.com/questions/15769381
复制相似问题