【问题标题】:AEM/CQ: Checkbox is checked saves a Boolean value of TRUE,How to save a Boolean value as FALSE if we Unchecked?AEM/CQ:复选框被选中保存布尔值 TRUE,如果我们未选中,如何将布尔值保存为 FALSE?
【发布时间】:2017-05-31 13:56:30
【问题描述】:

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

<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"/>

如果我们选中/启用了复选框,它将显示属性“示例”,如下所示 示例布尔真(工作正常) 如果我们取消选中/禁用该复选框,则它不会显示属性“Sample”

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

【问题讨论】:

    标签: checkbox boolean selection aem


    【解决方案1】:

    您可能需要查看Sling POST Servlet 的文档。当您提交对话时,将调用此 servlet。它有一个叫做 Suffixes 的东西,你可以在你的对话框中使用它来给 POST servlet 一些关于你的字段在做什么的提示。

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

    来自文档:

    如上所述,@DefaultValue 只有在没有为特定参数提供值的情况下才会生效。但是,在某些情况下,例如 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>
    

    因此,您必须在对话框定义中添加两个额外的隐藏字段:

    <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"/>
    

    密切注意字段的名称:

    ./sample@DefaultValue./sample@UseDefaultWhenMissing

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

    您可以在 Sling 文档中阅读更多不错的后缀:

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

    【讨论】:

    • 非常感谢!它的工作原理是使用 DefaultValue 和 UseDefaultWhenMissing 后缀创建两个隐藏字段。
    猜你喜欢
    • 1970-01-01
    • 2013-10-04
    • 2015-04-13
    • 1970-01-01
    • 2012-04-20
    • 2013-03-20
    • 2015-12-12
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多