Validate page properties on save in 6.5 | Adobe Higher Education
Skip to main content
Leela-Pavan-Kumar
Level 4
January 12, 2022
해결됨

Validate page properties on save in 6.5

  • January 12, 2022
  • 1 답변
  • 1802 조회

Hi,

 

I want to validate page properties after saving a page and based on the validations need to show an Error or allow to save that page.

 

I tried with below JS wherein it failing when ever a required field in page properties is filled and trying to save the page it is saving even it is not a valid case.

$(document).on("foundation-contentloaded", function(e) { $("#id1, #id2").on("click", function() { validate(); }); $(".foundation-fixedanchor .coral3-Button--primary").on("click", function() { validate(); }); $(".foundation-wizard-control .coral3-Button--primary").on("click", function() { validate(); }); $("#id3").on("change keyup focus", function() { validate(); }); });

 

Is there any way that we can do validation after saving the page and show an error alert if it fails?

이 주제는 답변이 닫혔습니다.
최고의 답변: lukasz-m

@leela-pavan-kumarthis is definitely possible, but it will require some additional script. Please have a look on below example - it is not production ready - but in general it meets criteria you have describe. There are 2 elements, XML structure that contains radio group section and text field for ID. Second part is very simple javascript that should be registered as a client lib that will be available within page properties.

 

<rights jcr:primaryType="nt:unstructured" jcr:title="Rights" sling:resourceType="granite/ui/components/coral/foundation/form/fieldset"> <items jcr:primaryType="nt:unstructured"> <radiogroup jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/foundation/form/radiogroup"> <items jcr:primaryType="nt:unstructured"> <option1 jcr:primaryType="nt:unstructured" name="./rights" sling:resourceType="granite/ui/components/foundation/form/radio" text="Public" value="public"/> <option2 jcr:primaryType="nt:unstructured" name="./rights" sling:resourceType="granite/ui/components/foundation/form/radio" text="Private" value="private"/> </items> </radiogroup> <id jcr:primaryType="nt:unstructured" fieldLabel="ID" name="./id" sling:resourceType="granite/ui/components/coral/foundation/form/textfield"/> </items> </rights>(function(window, document, $, Granite) { 'use strict'; $('input[type="radio"]').click(function(){ if ($(this).is(':checked')) { var cmp = $('input[name*="./id"]') if ($(this).val() == 'private') { cmp.attr('aria-required', 'true'); } if ($(this).val() == 'public') { cmp.removeAttr('aria-required'); cmp.removeAttr('aria-invalid'); } } }); })(window, document, Granite.$, Granite);

 

1 답변

lukasz-m
Community Advisor
Community Advisor
January 12, 2022

Hi @leela-pavan-kumar, did you consider to use required property. This will give you result like below - it is used i.e. by OOTB Title field. Author is not able to save page properties until he sets title value.

You can find page properties implementation under /libs/wcm/foundation/components/basicpage/v1/basicpage/tabs.

Leela-Pavan-Kumar
Level 4
January 12, 2022

 

Hi @lukasz-m ,

 

Fields in Page Properties:

 

Rights : (Radio Group, Mandatory)
     - Public (Radio Button)
     - Private (Radio Button)

ID : (Text Field)

We have a radio group where in public and private options are there and this is mandatory & Text field which is not mandatory

 

 

If an author selects

  • Public - ID (Text Field) is optional
  • Private - ID(Text Field) is mandatory

 

Finally , This ID(Text Field)  needs to be dynamically mark as required if it is private.

 

Can we do this in AEM 6.5?

 

 

lukasz-m
Community Advisor
lukasz-mCommunity Advisor답변
Community Advisor
January 12, 2022

@leela-pavan-kumarthis is definitely possible, but it will require some additional script. Please have a look on below example - it is not production ready - but in general it meets criteria you have describe. There are 2 elements, XML structure that contains radio group section and text field for ID. Second part is very simple javascript that should be registered as a client lib that will be available within page properties.

 

<rights jcr:primaryType="nt:unstructured" jcr:title="Rights" sling:resourceType="granite/ui/components/coral/foundation/form/fieldset"> <items jcr:primaryType="nt:unstructured"> <radiogroup jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/foundation/form/radiogroup"> <items jcr:primaryType="nt:unstructured"> <option1 jcr:primaryType="nt:unstructured" name="./rights" sling:resourceType="granite/ui/components/foundation/form/radio" text="Public" value="public"/> <option2 jcr:primaryType="nt:unstructured" name="./rights" sling:resourceType="granite/ui/components/foundation/form/radio" text="Private" value="private"/> </items> </radiogroup> <id jcr:primaryType="nt:unstructured" fieldLabel="ID" name="./id" sling:resourceType="granite/ui/components/coral/foundation/form/textfield"/> </items> </rights>(function(window, document, $, Granite) { 'use strict'; $('input[type="radio"]').click(function(){ if ($(this).is(':checked')) { var cmp = $('input[name*="./id"]') if ($(this).val() == 'private') { cmp.attr('aria-required', 'true'); } if ($(this).val() == 'public') { cmp.removeAttr('aria-required'); cmp.removeAttr('aria-invalid'); } } }); })(window, document, Granite.$, Granite);