例如,我创建了一个带有以下属性的复选框
<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<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”,如下所示 示例布尔值为true (正常工作) 如果我们取消选中/禁用复选框,则表示未显示属性“Sample”
期望:如果我们取消选中/禁用复选框,我想显示 Sample Boolean false
答案 0 :(得分:8)
您可能需要查看 Sling POST Servlet 的文档。提交对话框时会调用此servlet。它有一些名为 Suffixes 的东西,您可以在对话框中使用它来为POST servlet提供有关字段正在做什么的一些提示。
例如,一个这样的后缀是@UseDefaultWhenMissing
后缀,它应该正是您所寻找的。 p>
来自文档:
如上所述,@ 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>
因此,您在对话框定义中要做的是添加两个额外的隐藏字段:
<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文档中,您可以阅读一些更好的后缀: