Expand my Community achievements bar.

Granite datepicker's valueFormat property throws errors/does not work

Avatar

Level 4

Hello,

I'm using AEM 6.3 and currently working on a dialog with a datepicker field. I'm trying to use the "valueFormat" property so that I can save the date value in something other than the standard UTC format but it doesn't appear to work correctly. Setting it to "M/D/YY" results in this error message in the log and nothing is saved -

1664755_pastedImage_2.png

org.apache.sling.servlets.post.impl.operations.ModifyOperation Exception during response processing.

javax.jcr.ValueFormatException: Invalid date 1/1/19

        at org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl.createValue(ValueFactoryImpl.java:239)

        at org.apache.jackrabbit.oak.jcr.session.NodeImpl.setProperty(NodeImpl.java:449)

        at org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler.store(SlingPropertyValueHandler.java:594)

        at org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler.setPropertyAsIs(SlingPropertyValueHandler.java:305)

        at org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler.setProperty(SlingPropertyValueHandler.java:158)

I assume this is happening because it's trying to save that format in a Date property node which expects standard UTC. To get around this i thought i'd try forcing the datepicker to save as a String using @TypeHint. This does allow it to work as expected, but when I re-open the dialog later the error log throws that same error (despite the field populating correctly in the dialog).

Is there any way to get around this error? Has anyone had success using valueFormat?

Thanks

5 Replies

Avatar

Level 10

Not sure about 6.3 but the below code works fine in 6.4 without any errors

<startDate-string

    about="This causes startDate to be saved as a String in JCR instead of Date"

    jcr:primaryType="nt:unstructured"

    sling:resourceType="/libs/granite/ui/components/coral/foundation/form/hidden"

    name="./startDate@TypeHint"

    value="String"/>

<start-date

    jcr:primaryType="nt:unstructured"

    sling:resourceType="granite/ui/components/coral/foundation/form/datepicker"

    fieldLabel="Start Date"

    name="./startDate"

    required="{Boolean}true"

    valueFormat="M/D/YY"/>

Avatar

Level 4

I tried it using the @TypeHint and it works fine with aem 6.3 as well.

<date-string

                        jcr:primaryType="nt:unstructured"

                        sling:resourceType="/libs/granite/ui/components/coral/foundation/form/hidden"

                        value="String"

                          name="./date@TypeHint"/>

<date

                        jcr:primaryType="nt:unstructured"

                        sling:resourceType="granite/ui/components/coral/foundation/form/datepicker"

                        fieldLabel="Date"

                        name="./date"

                        valueFormat="DD/MM/YYYY"/>

Make sure you are using /libs/granite/ui/components/coral/foundation/form/hidden  for @TypeHint

Avatar

Level 1

Hi @jocamp Are u able to resolve this issue? I am facing the same issue lately.

Avatar

Level 4

I can't recall exactly, but here is what we're using today and it is working. I think the key might have been adding "displayedFormat" as well as adding a typehint.

 

<startdateHint
  jcr:primaryType="nt:unstructured"
  sling:resourceType="granite/ui/components/coral/foundation/form/hidden"
  name="./startdate@TypeHint"
  value="String"/>
<startdate
  jcr:primaryType="nt:unstructured"
  sling:resourceType="granite/ui/components/coral/foundation/form/datepicker"
  displayedFormat="M/D/YY"
  fieldLabel="Start Date"
  name="./startdate"
  required= "{Boolean}true"
  valueFormat="M/D/YY"/>