AEM 6.2 向文件夹设置添加新字段但未保存数据

AEM 6.2 Adding new fields to folder settings but data is not saved

我尝试向 folder settings 添加一些字段。

为此,我在我的应用程序中覆盖了文件“/libs/dam/gui/content/assets/foldersharewizard”。添加了一个新选项卡和 2 个新复选框。出现新的选项卡和字段,但它们既不在文件夹节点也不在 jcr 中保存它们的值。我尝试修改默认字段,但当我更改名称时,我就停止工作了。

这是我在文件夹共享向导中添加的代码:

<tab5
    jcr:primaryType="nt:unstructured"
    jcr:title="Tab title"
    sling:resourceType="granite/ui/components/foundation/container">
<items jcr:primaryType="nt:unstructured">
    <editDeny
            jcr:primaryType="nt:unstructured"
            sling:resourceType="granite/ui/components/foundation/form/checkbox"
            id="editDeny"
            name="custom:deniedEdit"
            text="Hide edit"
            value="{Boolean}true"/>
    <delAllow
            jcr:primaryType="nt:unstructured"
            sling:resourceType="granite/ui/components/foundation/form/checkbox"
            id="delAllow"
            name="custom:allowedDel"
            text="Show delete"
            value="{Boolean}true"/>
</items>

由于 AEM 文档大多是废话,而且 Internet 上没有很多开发人员评论...我没有想法,如果你们中有人遇到过同样的问题或者知道我遗漏了什么,它会很棒。

您希望我粘贴的任何其他内容...但这只是我添加的所有代码。

谢谢。

我认为这是因为值是字符串数据类型——如果要将值存储为布尔值,请使用类型提示字段:

<editDeny
    jcr:primaryType="nt:unstructured"
    sling:resourceType="granite/ui/components/foundation/form/checkbox"
    id="editDeny"
    name="custom:deniedEdit"
    text="Hide edit"
    value="{Boolean}true"/>
<editDenyType
    jcr:primaryType="nt:unstructured"
    sling:resourceType="granite/ui/components/foundation/form/hidden"
    name="custom:deniedEdit@TypeHint"
    value="Boolean"/>

确保您已按照以下结构覆盖了正确的节点: /apps/dam/gui/content/assets/foldersharewizard/jcr:content/body/content/items/foldersettings/items/settings/items/right/items/tab5

<operation jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/foundation/form/hidden"
name=":operation"
value="custom.dam.share.folder"/>

必须覆盖此节点才能调用自定义 PostOperation

@Component(metatype = false)
@Service
@Properties({@Property(name = "sling.post.operation", value = {"custom.dam.share.folder"}), @Property(name = "sling.servlet.methods", value = {"POST"})})
public class CustomFolderShareHandler implements PostOperation {

    @Reference(target = "(sling.post.operation=dam.share.folder)")
    PostOperation folderShareHandler;

    @Override
    public void run(SlingHttpServletRequest request, PostResponse response, SlingPostProcessor[] processors) {
        folderShareHandler.run(request, response, processors);
        // DO CUSTOM STUFF
    }
}