如何通过字段转换器对xPage multiline editBox进行排序?

时间:2016-02-29 04:48:49

标签: javascript xpages

我的页面上有多行编辑框。我想要一个转换器,将输入的文本转换为列表(用新行代替comas),然后执行@Unique,最后排序保存。这是我的代码不起作用:

<xp:inputTextarea value="#{document1.Members}" id="inputMembers" multipleTrim="true" immediate="true">
<xp:this.multipleSeparator><![CDATA[#{javascript:"\n"}]]></xp:this.multipleSeparator>
<xp:this.converter>
    <xp:customConverter>
        <xp:this.getAsObject><![CDATA[#{javascript:@Unique(value).sort();}]]></xp:this.getAsObject>
        <xp:this.getAsString><![CDATA[#{javascript:@ReplaceSubString(value, ",", "\n");}]]></xp:this.getAsString>
    </xp:customConverter>
</xp:this.converter>

它确实用新行替换了coma,但没有对列表进行排序

1 个答案:

答案 0 :(得分:3)

不要使用multipleSeparator属性。否则,将分别为每个条目(=行)执行getAsObject转换器。这就是为什么排序不起作用的原因。

使用&#34; \ n&#34;删除条目相反,当转换浏览器的值(getAsString)并在从浏览器(getAsObject)返回行时对多行和逗号分隔值进行分解并对结果数组进行排序:

<xp:inputTextarea
    value="#{document1.Members}"
    id="inputMembers"
    rows="10">
    <xp:this.converter>
        <xp:customConverter>
            <xp:this.getAsObject><![CDATA[#{javascript:
                @Unique(@Trim(@Explode(value, ["\n", ","]))).sort()
            }]]></xp:this.getAsObject>
            <xp:this.getAsString><![CDATA[#{javascript:
                @Implode(value, "\n")
            }]]></xp:this.getAsString>
        </xp:customConverter>
    </xp:this.converter>
</xp:inputTextarea>