- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Sling 应用程序中,我想确保使用特定 sling:resourceType
创建的节点总是有一个使用特定属性创建的子节点。什么方法可以实现这一点符合最佳实践?
扩展SlingPostServlet
类并添加功能以在 doPost()
中添加子节点方法。这看起来很合适,因为乍一看,可以将 servlet 链接到特定资源类型,并调用 super.doPost()
使用默认的SlingPostServlet
加工。但是,在安装 bundle 时,org.apache.sling.servlets.post.impl
无法解析 ( a similar problem was encountered by another user ),这会导致 bundle 根本无法运行。
创建 SlingPostProcessor
并在 process()
中添加功能方法。这似乎不太理想,因为它不依赖于一种特定的资源类型。
使用Sling Eventing .
我想避免扩展 SlingAllMethodsServlet
,因为维护对 SlingPostServlet
中所有默认功能的访问将很有用。 。然而,是否有可能延长 SlingPostServlet
,而不是 SlingAllMethodsServlet
?
最佳答案
我认为没有一个简单的解决方案可以将该行为绑定(bind)到单个资源类型。您将需要检查新资源并根据需要应用您的更改。我认为两个最好的选择是你提到的 SlingPostProcessor 和 Resource observation .
资源观察允许您“监听”资源的变化并执行您认为合适的任何操作。
实现也相当简单。创建一个新的 OSGi 服务,该服务实现 ResourceChangeListener 接口(interface)并添加一些属性来过滤您感兴趣的更改类型。这类似于使用 JCR 事件和作业,但更直接。
这样做的好处是它独立于任何发布请求。缺点是您需要使用新 session 来执行更改。 (您可以使用ResourceResolverFactory.getServiceResourceResolver
)
例如。
@Component(property = {
ResourceChangeListener.CHANGES + "=ADDED",
ResourceChangeListener.PATHS + "=glob:/content/*",
})
public class ResourceObserver implements ResourceChangeListener {
@Override
public void onChange(@Nonnull List<ResourceChange> changes) {
//go through the list of changes and do what you need to do.
}
}
关于java - 是否有更好的替代方案来扩展 SlingPostServlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55796025/
在 Sling 应用程序中,我想确保使用特定 sling:resourceType 创建的节点总是有一个使用特定属性创建的子节点。什么方法可以实现这一点符合最佳实践? 扩展SlingPostServl
我是一名优秀的程序员,十分优秀!