gpt4 book ai didi

jsf - Primefaces,自动完成功能,多种模式。如何避免两次选择同一项目?

转载 作者:行者123 更新时间:2023-12-04 14:00:24 27 4
gpt4 key购买 nike

我知道我无法直接在Primefaces中执行此操作,我知道我必须在Converter中执行此操作,但是我真的不知道在哪个阶段以及如何执行?我到底应该检查什么?
也许为此,我需要加入JSF的生命周期?例如,在p:Autocomplete将项目添加到“应用请求值阶段”列表中之后,如果我正确理解了JSF生命周期,我应该检查是否存在重复的项目并在“更新模型值阶段”之前将其删除。
有可能吗?
先感谢您。

最佳答案

您可能要做的是针对每个用户的选择/取消选择,使模型保持最新状态。这是通过在<p:ajax />中使用<p:autoComplete />标记完成的,因此所选项目的List将在后端更新。稍后,当用户要求其他查询时,请注意该List

使用List值的String来检查此SSCCE(您可以选择是否对自己的自定义类使用Converter,但这与您的问题完全无关):

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head />
<h:body>
<h:form>
<p:outputLabel value="Multiple:" />
<p:autoComplete multiple="true"
value="#{autoCompleteBean.selectedItems}"
completeMethod="#{autoCompleteBean.completeItem}" var="it"
itemLabel="#{it}" itemValue="#{it}" forceSelection="true">
<p:ajax event="itemSelect" />
<p:ajax event="itemUnselect" />
<p:column>
<h:outputText value="#{it}" />
</p:column>
</p:autoComplete>
</h:form>
</h:body>
</html>

@ManagedBean
@ViewScoped
public class AutoCompleteBean {

/**
* The items currently available for selection
*/
private List<String> items = new ArrayList<String>();

/**
* Current selected items
*/
private List<String> selectedItems = new ArrayList<String>();

/**
* All the items available in the application
*/
private List<String> allItems = new ArrayList<String>();

/**
* Create a hardcoded set of items and add all of them for selection
*/
public AutoCompleteBean() {
allItems.add("item1");
allItems.add("item2");
allItems.add("item3");
allItems.add("item4");
items.addAll(allItems);
}

/**
* Check the current user query for selection. If it fits any of the items
* of the system and it's not already selected, add it to the filtered List
*
* @param query
* @return
*/
public List<String> completeItem(String query) {
List<String> filteredList = new ArrayList<String>();
for (String item : allItems) {
if (item.startsWith(query) && !selectedItems.contains(item)) {
filteredList.add(item);
}
}
return filteredList;
}

public List<String> getItems() {
return items;
}

public List<String> getSelectedItems() {
return selectedItems;
}

public void setSelectedItems(List<String> selectedItems) {
this.selectedItems = selectedItems;
}

}

关于jsf - Primefaces,自动完成功能,多种模式。如何避免两次选择同一项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25046033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com