2016-02-29 80 views
3

我的页面上有多行编辑框。我需要一个将输入文本转换为列表的转换器(用新行替换例如逗号),然后执行@Unique并最终在保存时进行排序。这里是我的代码无法正常工作:如何通过字段转换器对xPage多行编辑框进行排序?

<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> 

它取代昏迷与新行,但不会对列表进行排序

回答

3

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

内爆与条目“\ n”,而不是用于浏览器转换时的值(符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> 
+0

有用。谢谢 –

相关问题