Primefaces自动完成(多个),处理预先填充的项目

时间:2016-11-10 12:21:23

标签: ajax primefaces autocomplete

我有一个非常简单的autocomplete(多个)组件(类似于PF展示中的组件),允许用户从下拉列表中选择项目,并使用commandbutton将值保存到数据库。

@PostConstruct方法获取数据并在自动完成组件中预填充它们(如果找到)。

问题是组件似乎无法控制那些预先填充的项目。例如,如果我通过单击关闭图标删除一个,它将从页面中消失,但事件对象既不是ValueChangeListenerSelectEventListener(Ajax项目选择),也不是UnselectEventListener(Ajax取消选择) )返回正确的值,而它们都返回null。我只能添加新项目或删除这些新添加的项目。如果我删除其中一个预先填充的项目,然后单击“保存”,则所有其他预先填充的项目将会消失。

如何在自动填充中处理(删除)预先填充的项目?

PF version 5.2

bean.java

private List<SomeObjs> selectedSomeObjs = new ArrayList<>();

@PostConstruct
public void init() {
    this.selectedSomeObjs = SomeDb.getSavedSomeObjs();
}

public void valueChange(ValueChangeEvent event) {
    Object oldVal = event.getOldValue(); // return prepopulated items
    Object newVal = event.getNewValue(); // return null, if delete one of the prepupulated items
}

.xhtml

<p:autoComplete id="auto" multiple="true"
            value="#{bean.selectedSomeObjs}"
            completeMethod="#{bean.autoComplete}" var="v"
            itemLabel="#{v.desc}" itemValue="#{v}" autocomplete="true" maxResults="15"
            minQueryLength="1" queryDelay="100" forceSelection="true" cache="true"
            valueChangeListener="#{bean.valueChange}">
    <o:converter converterId="omnifaces.ListConverter" list="#{bean.objsList}"/>
    <p:ajax event="itemUnselect" listener="#{bean.selectListener}"/>
    <p:ajax event="itemSelect" listener="#{bean.unselectListener}"/>
</p:autoComplete>

0 个答案:

没有答案