我试图弄清楚是否有可能在我第一次在页面上放置组件时自定义AEM创建的节点的名称。
定义了我的组件的cq:Component节点被命名为“ knowledge-center-question”,当我将其删除时,AEM使用其默认命名逻辑在页面的节点树中创建一个名为“ knowledge_center_que”的节点。我希望节点名称在删除时为“ question”(但我不想重命名组件本身)。
考虑到AEM中所有内容的可定制性,这种事情似乎必须可行,但我一直在努力寻找答案。
答案 0 :(得分:3)
看看:nameHints
,它可以作为POST参数发送到SlingPostServlet
:https://sling.apache.org/documentation/bundles/manipulating-content-the-slingpostservlet-servlets-post.html#algorithm-for-node-name-creation
答案 1 :(得分:0)
您需要编写一个自定义的Sling后处理器。在页面中放置了组件之后,将调用Sling后处理器。示例代码:
@Component(service = SlingPostProcessor.class, immediate = true, name = "com.aem.CustomPostProcessor")
public class CustomPostProcessor implements SlingPostProcessor {
@Override
public void process(SlingHttpServletRequest request, List<Modification> modifications) throws Exception {
if (accepts(request)) {
final Resource resource = request.getResourceResolver().getResource(request.getResource().getPath());
// Your logic
modifications.add(Modification.onCreated(resource.getPath()));
}
}
protected boolean accepts(SlingHttpServletRequest request) {
return "/my/resource/type".equals(request.getResource().getResourceType());
}
}