XPages Managed Bean setter在复选框更改时未触发

时间:2013-12-09 21:23:51

标签: xpages

我创建了一个基本上是复选框的自定义控件。我希望复选框读取我传入的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中。

感谢任何建议。

1 个答案:

答案 0 :(得分:4)

正如彼得在关于每个链接的问题的回答中所指出的,复选框不能直接绑定到布尔(这无疑是荒谬的)。添加以下方法:

public String getCategoriesOnAsString(){
 return isCategoriesOn() ? "1" : "0";
}

public void setCategoriesOnAsString(String value){
 setCategoriesOn("1".equals(value));
}

然后将您的复选框绑定到#{exhibitorInfo.categoriesOnAsString},并将checkedValueuncheckedValue分别设置为"1""0"