2017-03-17 108 views
0

我在我的JSF页面中使用了primefaces自动完成功能。它使用的分隔符是逗号。我正在分割数据以将autoComplete的数据转换为Array。现在问题是我的autoComplete中的数据项包含“,”。当我在我的数据项中使用分割时,它会将我的数据分割。例如:Primefaces自动完成更改分隔符

[mydataitem1,mydataitem 2,mydataitem,3,......] 现在阵列变得

mydataitem1 mydataitem 2 mydataitem ...

<p:autoComplete id="someId" multiple="true" value="${someBean.SomeValue}" 
    completeMethod="${someBean.completeMethod}" var="value" 
    itemLabel="value" itemValue="#{title}" forceSelection="true"> 
    <p:column> 
     <h:outputText value="#{title}" /> 
    </p:column> 
    <p:ajax event="itemSelect" listener="#{someBean.action}" process="@form" /> 
</p:autoComplete> 

是否有任何autoComplete属性,我可以将逗号更改为其他字符?

在此先感谢

+0

对不起,但自动完成使用逗号作为分隔符在哪里? –

+0

Thiks @ JaqenH'ghar为您的答复。我修改了我的问题。现在它包含primefaces autoComplete,它在动作函数中以逗号分隔值发送值。 –

回答

0

据我了解,你就必须使用multiple="true"当绑定到一个列表。如果你只是使用字符串,你可以绑定到一个List<String>,如果你使用一个复杂的对象,你将不得不使用List<MyObject>并添加一个转换器。

注:如果您在日志中打印出清单,它仍然会写

[mydataitem1, mydataitem 2, mydataitem 3,.....] 

但是,这仅仅是的toString() - 与逗号界定方法。

此外,您在itemLabelitemValue中有错误,应该始终使用#{}而不是${}

而且我认为process="@form"可能有点危险,就好像你在表单中有其他输入组件没有通过验证/转换一样,监听器将不会被调用。我只是删除它(默认是process =“@ this”)。

+0

我已经删除了process =“@ form”,并且没有任何.toString(),但这个值仍然用逗号分隔。以下是代码 '公共无效动作(AjaxBehaviorEvent事件){'' 对象\t对象=((UIOutput)event.getSource())的getValue();'' 字符串设为myVal = “”;'' myVal =((UIOutput)event.getSource())。getValue()。toString();' '}' –

+0

当调用监听器时,该值在someBean.SomeValue中可用。如果someValue是一个列表你有这一切,没有必要看看事件(据我了解) –

+0

好吧,它现在正常工作。我明白。非常感谢@Jaqen –