我有一个非常简单的autocomplete
(多个)组件(类似于PF展示中的组件),允许用户从下拉列表中选择项目,并使用commandbutton
将值保存到数据库。
@PostConstruct
方法获取数据并在自动完成组件中预填充它们(如果找到)。
问题是组件似乎无法控制那些预先填充的项目。例如,如果我通过单击关闭图标删除一个,它将从页面中消失,但事件对象既不是ValueChangeListener
,SelectEventListener
(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>