Java ApacheSling内容模块包装器

Java ApacheSling内容模块包装器,java,apache,aem,sling,Java,Apache,Aem,Sling,我正在用ApacheSling实现一个网站。某些零件应为“可编辑” 因此,我创建了一个自定义过滤器,它使用一些标记包装资源,提供编辑选项和模块特定的表单来更改属性。到目前为止还不错 @SlingFilter(scope = INCLUDE, order = 0) public class EditContentFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletExceptio

我正在用ApacheSling实现一个网站。某些零件应为“可编辑”

因此,我创建了一个自定义过滤器,它使用一些标记包装资源,提供编辑选项和模块特定的表单来更改属性。到目前为止还不错

@SlingFilter(scope = INCLUDE, order = 0)
public class EditContentFilter implements Filter
{
public void init(FilterConfig filterConfig) throws ServletException
{
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
    SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request;

    Resource resource = slingRequest.getResource();

    if (isComponent(resource))
    {
        response.getWriter().write(this.buildEditBarHTML(resource));
        chain.doFilter(request, response);
        response.getWriter().write("</div>");
    }
    else
    {
        chain.doFilter(request, response);
    }
}
@SlingFilter(范围=INCLUDE,顺序=0)
公共类EditContentFilter实现筛选器
{
public void init(FilterConfig FilterConfig)抛出ServletException
{
}
public void doFilter(ServletRequest请求、ServletResponse响应、FilterChain链)抛出IOException、ServletException
{
SlingHttpServletRequest slingRequest=(SlingHttpServletRequest)请求;
Resource=slingRequest.getResource();
if(组件(资源))
{
response.getWriter().write(this.buildEditBarHTML(资源));
链式过滤器(请求、响应);
response.getWriter().write(“”);
}
其他的
{
链式过滤器(请求、响应);
}
}
私有字符串buildEditBarHTML(资源)
{
ResourceResolver ResourceResolver=resource.getResourceResolver();
ResourceComponentResource=resourceResolver.resolve(“/apps/”+Resource.getResourceType());
StringBuilder html=新的StringBuilder(“”);
if(componentResource!=null)
{
ResourceComponentDialog=componentResource.getChild(“表单”);
如果(componentDialog!=null)
{
Iterable dialogItems=componentDialog.getChildren();
附加(“编辑”);
html.append(“”);
html.append(“”);
html.append(“”);
html.append(“”);
用于(资源dialogItem:dialogItems)
{
append(buildDialogItem(dialogItem));
}
html.append(“save”);
html.append(“”);
html.append(“”);
}
其他的
{
附加(“编辑”);
}
}
html.append(“”);
返回html.toString();
}
一切正常,但我真的不喜欢用java后端代码手动创建标记

所以我认为创建一个生成编辑面板的组件,然后包含实际组件是个好主意

<div class='editable' data-resource="${resource.path}">
<!-- Edit Pannel -->
<sly data-sly-resource="${resource.path @ resourceType='website/dialog/editPanel'}"></sly>

<!-- Include component -->
<sly data-sly-resource="${resource.path}"></sly>

<!-- Edit Overlay -->
<sly data-sly-resource="${resource.path @ resourceType='website/dialog/editOverlay'}"></sly>
</div>

但是我不知道如何覆盖过滤器上的资源类型。 你们有没有人有办法解决这个问题

<div class='editable' data-resource="${resource.path}">
<!-- Edit Pannel -->
<sly data-sly-resource="${resource.path @ resourceType='website/dialog/editPanel'}"></sly>

<!-- Include component -->
<sly data-sly-resource="${resource.path}"></sly>

<!-- Edit Overlay -->
<sly data-sly-resource="${resource.path @ resourceType='website/dialog/editOverlay'}"></sly>
</div>