Using the Touch UI interface, I have a 'multifield' that contains a series of 'select' fields. I can select, change, and delete items in this multifield just fine, however, when I try to remove the last remaining 'select' from the multifield and save, the last item is not removed. I've tried setting the 'allowBlank' property to true, but it still won't let me remove the last item from the multifield. Any ideas on how I can achieve this?
UPDATE
Here is the contents of my .content.xml file for the cq:dialog node. The /jcr:root/content/items/section-filters/items/permissions node is the offender. I'm not sure that 'allowBlank' is a valid property in the Touch UI:
<?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" jcr:primaryType="nt:unstructured" jcr:title="Edit Portal Component" sling:resourceType="cq/gui/components/authoring/dialog"> <content jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/foundation/container"> <layout jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/foundation/layouts/tabs"/> <items jcr:primaryType="nt:unstructured"> <section-properties jcr:primaryType="nt:unstructured" jcr:title="Properties" sling:resourceType="granite/ui/components/foundation/container"> <items jcr:primaryType="nt:unstructured"> <caption jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/foundation/form/textfield" fieldDescription="A caption for the component" fieldLabel="Caption" name="./caption"/> <applet-size jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/foundation/form/textfield" fieldDescription="1-12 or flush" fieldLabel="Applet Size" name="./applet-size"/> </items> </section-properties> <section-filters jcr:primaryType="nt:unstructured" jcr:title="Portal Filters" sling:resourceType="granite/ui/components/foundation/container"> <items jcr:primaryType="nt:unstructured"> <permissions jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/foundation/form/multifield" fieldDescription="A user must have at least one of these permissions to view this component" fieldLabel="Permissions" name="./permissions"> <field jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/foundation/form/select" allowBlank="{Boolean}true" name="./permissions"> <datasource jcr:primaryType="nt:unstructured" sling:resourceType="/apps/mportal/datasources/permissions"/> </field> </permissions> <startdate jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/foundation/form/datepicker" fieldLabel="Start Date" name="./startdate"/> <enddate jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/foundation/form/datepicker" fieldLabel="End Date" name="./enddate"/> </items> </section-filters> </items> </content> </jcr:root>
Solved! Go to Solution.
Views
Replies
Total Likes
It turns out there is an issue with the way AEM Touch UI multifield components update values. If you remove the last item, the component sends no value up to the server (much like an unchecked checkbox). You have to explicitly tell AEM that you want to delete the value of a multifield if there are no items in it. Here's how:
permissions-delete
(to correspond with my multifield called permissions
)sling:resourceType
, String
, granite/ui/components/foundation/form/hidden
name
, String
, ./permissions@Delete
(where ./permissions
is the value of name field of the permissions/field
node)value
, Boolean
, trueNow when you remove the last item, the value of the hidden field will ensure that it is deleted and not just ignored.
Views
Replies
Total Likes
It could be some thing in your code(multifield) widget or dialog.xml that is causing this issue. I may be able to give some hint if you post snippet of your code.
Views
Replies
Total Likes
It turns out there is an issue with the way AEM Touch UI multifield components update values. If you remove the last item, the component sends no value up to the server (much like an unchecked checkbox). You have to explicitly tell AEM that you want to delete the value of a multifield if there are no items in it. Here's how:
permissions-delete
(to correspond with my multifield called permissions
)sling:resourceType
, String
, granite/ui/components/foundation/form/hidden
name
, String
, ./permissions@Delete
(where ./permissions
is the value of name field of the permissions/field
node)value
, Boolean
, trueNow when you remove the last item, the value of the hidden field will ensure that it is deleted and not just ignored.
Views
Replies
Total Likes
Hi Harrison,
Thank you for finding a workaround to fix this issue. It works, I verified by modifying changes to your component.
M. Shaji Ahmed
Views
Replies
Total Likes
I updated the question with the contents of .content.xml for the cq:dialog node.
Views
Replies
Total Likes
You have same names(./permissions) for both the fields permissions and field, can you make the names unique and try again
Views
Replies
Total Likes
I'm afraid that did not fix the problem. The value persists despite all attempts to the contrary! (Unless, of course, I remove it explicitly through the CRX interface.)
Views
Replies
Total Likes
Can you attach package, also which version of AEM r u using?
Views
Replies
Total Likes
I am running AEM 6.0. Attached is a "base-component", a "test-component" with a sling:resourceSuperType of "base-component", and a tabs folder that contains a dialog tab used in the base-component. Try adding items to any of the multi-fields, save, then try to remove, save again and reopen the dialog to see if at least one of the items is still there.
Views
Replies
Total Likes
It seems that your package has some missing files, it doesn't work for me. I got
Caused by: org.apache.sling.scripting.jsp.jasper.JasperException: /apps/mportal/components/base-component/base-component.jsp(1,1) File "/apps/mportal/global.jsp" not found
Please make sure you have all necessary files before you upload.
Views
Replies
Total Likes
Sorry about that. I've created a new package and loaded it into a fresh instance of AEM; it seems to work fine now. Once you have this new package loaded, you can find a test page at localhost:4502/editor.html/content/mportal/test.html Open the edit dialog for any of the components on that page and click the "Portal Filters" tab. If you edit the first component on the page (the one that says "Hello People! (Flush)"), then you should see that there is a permission selected. Attempting to remove this and reopen the dialog should demonstrate the problem. Note: changing a permission, adding a new permission, or even removing a permission that's not the last item in the multifield saves just fine. The issue only occurs when attempting to remove the last item in the multifield.
I really appreciate you being willing to help me with this.
Views
Replies
Total Likes
Hi Harrison,
I don't think it is the problem with your code. I tried out of box geometrixx-outdoors tab /apps/geometrixx-outdoors/components/tabctrl component which is also a multifield widget.
I dragged and dropped on geometrixx-outdoors home page and created tabs, when I remove them I see the same problem as yours.
I cannot remove all of them at once, I need to remove one at a time and save. Last one remains, we cannot get rid of this.
It seems that coral ui events might be having issues in saving the data to node.
I request community members from Adobe test it and file a ticket for fix.
Thanks
Views
Replies
Total Likes
Thank you, I verified this with the Admitted Groups field on page properties in the Geometrixx site, and found the same thing there--apparently a bug in the Touch UI.
Views
Replies
Total Likes
Views
Likes
Replies