2017-05-31 1 views
2

Par exemple, j'ai créé une case à cocher propriétés ci-dessousAEM/CQ: case à cocher cochée enregistre une valeur booléenne de TRUE, comment enregistrer une valeur booléenne comme FALSE si on n'est pas coché?

<checkbox1 
        jcr:primaryType="cq:Widget" 
        checked="false" 
        defaultValue="false" 
        fieldLabel="Sample" 
        inputValue="true" 
        name="./sample" 
        checkboxBoolTypeHint="{Boolean}true" 
        type="checkbox" 
        xtype="selection"> 
        <listeners 
         jcr:primaryType="nt:unstructured" 
         check="function(isChecked){var panel = this.findParentByType('panel'); var fields = panel.find('name', './sample'); for (var i=0;i&lt;fields.length; i++) {if (fields[i].xtype == 'hidden') { if (isChecked.checked) {fields[i].setDisabled(true);} else {fields[i].setDisabled(false);}}}}"/> 

</checkbox1> 
<hiddenCheckbox1 
        jcr:primaryType="cq:Widget" 
        disabled="{Boolean}true" 
        ignoreData="{Boolean}true" 
        name="./sample" 
        value="{Boolean}false" 
        xtype="hidden"/> 

Si nous avons vérifié/activé la case à cocher, il montre la propriété « échantillon » comme ci-dessous exemple Boolean true (fonctionne bien) Si nous Décoché/désactiver la case à cocher alors il ne montre pas la propriété « échantillon »

Attente: Je veux montrer Sample Boolean false si nous Décoché/désactiver la case à cocher

Répondre

5

Vous souhaiterez peut-être vérifier la documentation de la servlet Sling POST . Cette servlet est appelée lorsque vous soumettez votre boîte de dialogue. Il a quelque chose appelé Suffixes que vous pouvez utiliser dans votre boîte de dialogue pour donner au servlet POST quelques indications sur ce que font vos champs.

Un tel suffixe est par exemple le suffixe @UseDefaultWhenMissing, qui devrait être exactement ce que vous cherchez.

De la documentation:

Comme décrit ci-dessus, @DefaultValue ne prend effet que si aucune valeur est prévue pour un paramètre particulier. Cependant, dans certains cas, tels que les cases à cocher HTML, cela n'est pas suffisant car le paramètre n'est pas du tout soumis. Pour gérer ce scénario, vous pouvez utiliser le paramètre @UseDefaultWhenMissing suffixé.

<form method="POST" action="/content/page/first" enctype="multipart/form-data"> 
    <input name="queryIgnoreNoise" class="input" type="checkbox" value="true"/> 
    <input type="hidden" name="[email protected]" value="false"/> 
    <input type="hidden" name="[email protected]" value="true"/> 
</form> 

Donc ce que vous avez à faire dans votre définition de dialogue est d'ajouter deux champs supplémentaires cachés:

<checkbox1DefaultValue 
    jcr:primaryType="cq:Widget" 
    name="./[email protected]" 
    value="{Boolean}false" 
    xtype="hidden"/> 
<checkbox1UseDefaultWhenMissing 
    jcr:primaryType="cq:Widget" 
    name="./[email protected]" 
    value="{Boolean}true" 
    xtype="hidden"/> 

Portez une attention particulière aux noms des champs:

./[email protected] et ./[email protected].

C'est le nom de la case à cocher (sample) plus le nom des deux suffixes requis: @DefaultValue et @UseDefaultWhenMissing.

Il y a quelques suffixes plus belles que vous pouvez lire dans la documentation de Sling:

https://sling.apache.org/documentation/bundles/manipulating-content-the-slingpostservlet-servlets-post.html

+1

Merci beaucoup .it travaille en créant deux champs cachés en utilisant DefaultValue et UseDefaultWhenMissing! Suffixes. – user6041432