我创建了一个基本上是复选框的自定义控件。我希望复选框读取我传入的dataSource的值 - 这将是一个托管bean。我可以从bean中读取复选框字段,但是当我更改复选框时,我没有看到任何事情发生。它看起来不像bean中的setter被调用。
我的bean的关键片段是:
private boolean categoriesOn;
...
public boolean isCategoriesOn() {
System.out.println("Getting On Value");
return categoriesOn;
}
public void setCategoriesOn(boolean newValue) {
System.out.println("Setting On : " + newValue);
this.categoriesOn = newValue;
}
XPage上的控件如下所示:
<xp:checkBox id="flipSwitch"
styleClass="onoffswitch-checkbox"
value="${compositeData.dataSource}"
checkedValue="#{javascript:true}"
uncheckedValue="#{javascript:false}">
<xp:eventHandler event="onchange" submit="true"
refreshMode="complete">
</xp:eventHandler>
</xp:checkBox>
我使用自定义属性将bean传递给自定义控件:
<xc:crtl_toggleSwitch
dataSource="#{exhibitorInfo.categoriesOn}"
refreshID="computedField6">
</xc:crtl_toggleSwitch>
dataSource设置为使用Methodbinding。
我尝试过部分和完全刷新。我只是不确定我需要做些什么才能将更改后的值恢复到bean中。
感谢任何建议。
答案 0 :(得分:4)
正如彼得在关于每个链接的问题的回答中所指出的,复选框不能直接绑定到布尔(这无疑是荒谬的)。添加以下方法:
public String getCategoriesOnAsString(){
return isCategoriesOn() ? "1" : "0";
}
public void setCategoriesOnAsString(String value){
setCategoriesOn("1".equals(value));
}
然后将您的复选框绑定到#{exhibitorInfo.categoriesOnAsString}
,并将checkedValue
和uncheckedValue
分别设置为"1"
和"0"
。