2

在我的应用程序中,我将对象的属性定义为 LinkedHashSet。我用多值字段中的值填充的属性:

Vector<String> ctrs = doc.getItemValue("countries");        
LinkedHashSet<String> items = new LinkedHashSet<String>();      
for (int i = 0; i < ctrs.size(); i++){          
    items.add(ctrs.get(i));
}       
employee.setCountry(items);

在 XPage 上,我想显示如下值:

<xp:inputText id="inputCountries" value="#{employeeBean.employee.Country}">
    <xp:this.multipleSeparator><![CDATA[#{javascript:var val = getComponent("contractType").getValue();
if (val == "Multi"){
    return ",";
}}]]></xp:this.multipleSeparator>
</xp:inputText>

根据员工的类型,此字段可能是单值或多值。

查看 XPage 时,返回值显示如下:

[瑞典、丹麦、爱沙尼亚]

当然,我会将其显示为多值。我应该怎么做才能纠正这个?

4

3 回答 3

3

如果您将 HashSet 转换为 Array 那么它应该可以工作

这是一个示例,第一个作为单值字段/第二个作为多值字段:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:inputText id="singleValue" multipleSeparator=",">
        <xp:this.value><![CDATA[#{javascript:var items:java.util.Set = new java.util.LinkedHashSet();
items.add("Sweden");      
return items.toArray();}]]>
        </xp:this.value>
    </xp:inputText>

    <br></br>
    <br></br>

    <xp:inputText id="multiValue" multipleSeparator=",">
        <xp:this.value><![CDATA[#{javascript:var items:java.util.Set = new java.util.LinkedHashSet();
items.add("Sweden");
items.add("Denmark");  
items.add("Estonia");
return items.toArray();}]]>
        </xp:this.value>
    </xp:inputText>

</xp:view>

浏览器上的输出如下所示:

Sweden

Sweden,Denmark,Estonia
于 2017-04-12T09:01:46.270 回答
1

您必须使用 List 而不是 Set。

此外,除非您使用 LinkedHashSet 作为从 Vector 中删除重复值的一种方式,否则您可以将setCountry方法传递给 vector,因为它Vector实现了List

// setting country method
yourBlock() {
   // It's better to use interface instead of implementation for the variable
   List<String> countries = doc.getItemValue("countries");

   setCountries(countries);
}

如果您确实将LinkedHashSet其用作获取唯一值的一种方式,则需要稍微调整上述代码。

// setting country method
yourBlock() {
   List<String> countries = doc.getItemValue("countries");

   setCountries(new ArrayList<String>(new LinkedHashSet<String>(countries)));
}
于 2017-04-13T07:44:13.637 回答
0

如果您只想查看数据

选项 1:使用 @Implode 和一些分隔符拆分值,逗号或<br/>应该可以工作。

选项 2:使用带有自定义渲染的重复:多个计算文本、div 或表格。

如果您想编辑数据

您需要使用重复。在这种情况下,如果要绑定输入,则需要为 bean 实现 Map 接口。好书在这里:https ://www.mindoo.com/web/blog.nsf/dx/16.07.2009095816KLEBCY.htm?opendocument&comments

于 2017-04-12T09:08:11.160 回答