3

如果我以错误的方式提出问题,我将首先说出我想要实现的目标:

我在 CQ5 中具有以下组件结构:/apps/TEST/components/DatabaseConnection(DatabaseConnection 是组件名称)/apps/TEST/components/DatabaseConnection/src/ServletDatabaseConnection(这是我用于处理来自 TEST 的 POST 请求的 serlvet /组件/数据库连接。

在我的 servlet sling.servlet.resourceTypes 设置为 TEST/components/DatabaseConnection)

所以,我设置了sling.servlet.resourceTypes的相对路径,servlet会在/apps/TEST/components/DatabaseConnection和/libs/TEST/components/DatabaseConnection/下寻找resourceType

但是我希望能够将我的组件 DatabaseConnection 移动到任何其他文件夹,并且在 servlet 和应用程序中都不会更改任何内容。但如果我现在这样做,我将不得不将 sling.servlet.resourceTypes 更改为新的 resourceType

考虑到 Sling 中的一切都是资源,而不是我的 servlet 也是资源,对吧?那么,可能可以将 sling.servlet.resourceTypes 设置为相对于 servlet 的 resourceType 吗?

那么,我可以相对于这个 servlet 的资源类型设置 sling.servlet.resourceTypes 吗?如果不是,是否有任何其他方法可以使我的组件“可移动”,这样我就不必更改 servlet 中的任何内容?

我发现这两个资源非常有用: http: //www.pro-vision.de/content/medialib/pro-vision/production/adaptto/2012/adaptto2012-apache-sling-basic-concepts-rainer-bartl -peter-manne/_jcr_content/renditions/rendition.file/adaptto2012-apache-sling-basic-concepts-rainer-bartl-peter-mannel.pdf http://sling.apache.org/site/resources.html 但我还是想不出解决办法

4

2 回答 2

1

7 个月过去了,在查看同事的代码后,我发现了如何实现我想要实现的目标 :)

所以我想让组件和它的 servlet 一起移动。

为此,我们不需要使用 resourceType,但我们需要使用 sling.servlet.paths。 http://sling.apache.org/documentation/the-sling-engine/servlets.html

为了让它发挥作用,我们需要做三件事。

1) 在我们要发送到 Servlet 的表单中,设置一些动作。例子:

<form name="name" id="id" action="/someaction/dothis" method="POST">
<button name="submit"> Submit </button>
</form>

2) 在 servlet 中设置 sling.servlet.paths。在我们的例子中:

@Component(immediate = true)
@Service(value=javax.servlet.Servlet.class)
@Properties(value = {
@Property(name="sling.servlet.methods", value={ "POST" }),
//
@Property(name="sling.servlet.paths", value={"/someaction/dothis"})
})
public class ServletEvaluation extends SlingAllMethodsServlet {
...
}

3) 在 OSGi 控制台 /system/console/configMgr 中配置 Apache Sling Servlet/Resource Resolver:将 sling.servlet.path 添加到执行路径。在我们的例子中,将执行路径设置为 /someaction

于 2013-09-02T15:41:53.227 回答
0

您是否尝试设置绝对路径而不是资源类型?例如,如果您将路径设置为 /bin/TEST/DatabaseConnection,那么资源类型是什么并不重要。

于 2013-02-05T09:27:11.663 回答