在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()))
有没有人建议我如何解决我的斗争?提前谢谢。
答案 0 :(得分:1)
你不能像这样制作一个单值或多值的listBox。您设置的是HTML属性,在设置或检索值时没有任何影响。就listBox而言,控件所期望的是一个简单的String
。如果:您只从列表中选择了一个值并且没有像您那样键入国家/地区,那么它几乎不会起作用。但你做到了:它是List<String>
。要使其正常工作,您应该使用属性multiple
。
<xp:listBox id="Country" value="#{employeeBean.employee.countries}" multiple="true">
但它不会给你所需的灵活性。您需要重新考虑您的方法:自定义转换器或其他。