AEM/CQ:选中复选框保存布尔值TRUE,如果我们取消选中,如何将布尔值保存为FALSE?

Use*_*053 4 checkbox boolean selection aem

例如,我创建了一个包含以下属性的复选框

<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"/>
Run Code Online (Sandbox Code Playgroud)

如果我们选中/启用了复选框,它会显示属性"Sample",如下面的 示例Boolean true (正常工作)如果我们取消选中/禁用复选框,那么它不会显示属性"Sample"

期望:如果我们取消选中/禁用复选框,我想显示 Sample Boolean false

Jen*_*ens 8

您可能需要查看Sling POST Servlet的文档.提交对话框时会调用此servlet.它有一个名为Suffixes的东西,您可以在对话框中使用它来为POST servlet提供有关字段正在执行的操作的一些提示.

例如,一个这样的后缀是@UseDefaultWhenMissing后缀,它应该正是您正在寻找的.

从文档:

如上所述,@ DefaultFalue仅在没有为特定参数提供值时生效.但是,在某些情况下,例如HTML复选框,这还不够,因为根本没有提交参数.要处理此方案,可以使用@UseDefaultWhenMissing后缀参数.

<form method="POST" action="/content/page/first" enctype="multipart/form-data">
    <input name="queryIgnoreNoise" class="input" type="checkbox" value="true"/>
    <input type="hidden" name="queryIgnoreNoise@DefaultValue" value="false"/> 
    <input type="hidden" name="queryIgnoreNoise@UseDefaultWhenMissing" value="true"/>
</form>
Run Code Online (Sandbox Code Playgroud)

所以你在对话框定义中要做的就是添加两个额外的隐藏字段:

<checkbox1DefaultValue
    jcr:primaryType="cq:Widget"
    name="./sample@DefaultValue"
    value="{Boolean}false"
    xtype="hidden"/>
<checkbox1UseDefaultWhenMissing
    jcr:primaryType="cq:Widget"
    name="./sample@UseDefaultWhenMissing"
    value="{Boolean}true"
    xtype="hidden"/>
Run Code Online (Sandbox Code Playgroud)

密切关注字段的名称:

./sample@DefaultValue./sample@UseDefaultWhenMissing.

它是checkbox(sample)的名称加上两个必需后缀的名称:@DefaultValue@UseDefaultWhenMissing.

您可以在Sling文档中阅读一些更好的后缀:

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