我的页面上有多行编辑框。我想要一个转换器,将输入的文本转换为列表(用新行代替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,但没有对列表进行排序
答案 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>