【问题标题】:Primefaces autoComplete change separatorPrimefaces 自动完成更改分隔符
【发布时间】:2017-03-17 17:10:15
【问题描述】:

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

[我的数据项1,我的数据项2,我的数据项,3,.....] 现在数组变成了

我的数据项1 我的数据项 2 我的数据项 3 ...

<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 属性可以让我将逗号更改为其他字符?

提前致谢

【问题讨论】:

  • 抱歉我的无知,但是使用逗号作为分隔符的自动完成功能在哪里?
  • 感谢@JaqenH'ghar 的回复。我修改了我的问题。现在它包含 primefaces autoComplete ,它在动作函数中以逗号分隔值发送值。

标签: primefaces autocomplete


【解决方案1】:

据我了解,使用multiple="true" 时,您必须绑定到列表中。如果您只使用字符串,则可以绑定到List&lt;String&gt;,如果您使用复杂对象,则必须使用List&lt;MyObject&gt; 并添加转换器。

注意:如果你打印出日志中的列表,它仍然会写

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

但这只是用逗号分隔的 toString() 方法。

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

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

【讨论】:

  • 我已经删除了 process="@form" 并且没有任何 .toString() 仍然值是用逗号分隔的。以下是代码public void action(AjaxBehaviorEvent event){Object object = ((UIOutput) event.getSource()).getValue();String myVal = "";myVal = ((UIOutput) event.getSource()).getValue().toString();}
  • 在调用监听器时,该值在 someBean.SomeValue 中可用。如果 someValue 是一个 List ,那么您就拥有了所有内容,则无需查看事件(据我了解)
  • 好的,现在可以正常工作了。我明白。非常感谢@Jaqen
猜你喜欢
  • 2014-04-23
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多