数据绑定列表框控件,可以是单个或多个值

时间:2017-04-28 08:40:21

标签: java xpages

在XPage上我放置了一个列表框控件。根据xpage上的选择(通过其他控件),列表框可​​以是单个值或多个值。列表框数据通过托管bean绑定:

<xp:listBox id="Country" value="#{employeeBean.employee.countries}" >
<xp:this.attrs>
<xp:attr name="multiple">
<xp:this.value><![CDATA[#{javascript:if(employeeBean.employee.type == "Multi"){
    return "true";
}}]]></xp:this.value>
<xp:this.rendered><![CDATA[#{employeeBean.employee.Type eq "Multi"}]]></xp:this.rendered>
</xp:attr>
</xp:this.attrs>
<xp:selectItems>
<xp:selectItem itemLabel="Sweden"></xp:selectItem>
<xp:selectItem itemLabel="Norway"></xp:selectItem>
</xp:listBox>

默认情况下,列表框是单个值。

当我删除数据绑定时,单个或多个之间的切换进展顺利。当我附上它时,它就会停止工作。

我担心我的数据绑定在某种程度上是错误的:

在我的员工班:

private List<String> countries = new ArrayList<String>();
public List<String> getCountries() {
        return countries;
    }
    public void setCountries(List<String> countries) {
        this.countries = countries;
    }

在我的员工DAO课程中

负载(VIEWENTRY):

if(doc.hasItem("country")){
    employee.setCountries(doc.getItemValue("country"));
}

保存(员工):

doc.replaceItemValue("country", new Vector(employee.getCountries()))

有没有人建议我如何解决我的斗争?提前谢谢。

1 个答案:

答案 0 :(得分:1)

你不能像这样制作一个单值或多值的listBox。您设置的是HTML属性,在设置或检索值时没有任何影响。就listBox而言,控件所期望的是一个简单的String。如果:您只从列表中选择了一个值并且没有像您那样键入国家/地区,那么它几乎不会起作用。但你做到了:它是List<String>。要使其正常工作,您应该使用属性multiple

<xp:listBox id="Country" value="#{employeeBean.employee.countries}" multiple="true">

但它不会给你所需的灵活性。您需要重新考虑您的方法:自定义转换器或其他。