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
}
}
我尝试向 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
}
}