【问题标题】:Primefaces AutoCompleteBean loses its list of selected objectsPrimefaces AutoCompleteBean 丢失其选定对象列表
【发布时间】:2014-03-05 08:43:07
【问题描述】:

我必须通过多项选择进行自动完成,所有选定的项目都必须是唯一的。我想在 completeRole 函数中过滤已经选择的值。但是 completeRole 函数获取 null selectedRoles 列表。我做错了什么?每次我想在自动完成输入中选择项目时,都会使用空列表创建新的 AutoCompleteBean?我该如何解决这个问题?

AutoCompleteBean.java

package primefaces.beans;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import bpm.beans.entities.Roles;

@ManagedBean(name = "autoCompleteBean")
public class AutoCompleteBean {

    private List<Roles> rolesDB;
    private List<Roles> selectedRoles;

    public AutoCompleteBean() {
        rolesDB = RolesBean.getRolesDB();
    }

    public List<Roles> completeRole(String query) {
        List<Roles> suggestions = new ArrayList<Roles>();  

        List<Roles> rl = getSelectedRoles();
        for(Roles p : rolesDB) {  
            if(p.getTitle().startsWith(query)) 
                if(rl==null){
                    suggestions.add(p);  
                }
                else if (rl.indexOf(p) < 0)
                    suggestions.add(p); 
        }  
        return suggestions;  
    } 
}

roles.xhtml

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui" xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
</h:head>
<h:body>
    <h:form id="form">
        <p:autoComplete value="#{autoCompleteBean.selectedRoles}" completeMethod="#{autoCompleteBean.completeRole}"  
            var="p" itemLabel="#{p.title}" itemValue="#{p}" converter="rolesConverter" multiple="true" 
            id="autoComplete" >  
            <p:column style="width:100%">#{p.title}</p:column>  
        </p:autoComplete> 
    </h:form>
</h:body>
</html>

【问题讨论】:

    标签: jsf-2 primefaces autocomplete


    【解决方案1】:

    要跨多个请求保留选择,您的 bean 必须至少为 @ViewScoped

    您必须处理您的选择并更新您的 bean 实例。添加ajax:

    <p:autoComplete value="#{autoCompleteBean.selectedRoles}" completeMethod="#{autoCompleteBean.completeRole}"  
            var="p" itemLabel="#{p.title}" itemValue="#{p}" converter="rolesConverter" multiple="true" 
            id="autoComplete" >  
    
        <p:ajax event="itemSelect" process="@this" update="@this"/>
    
        <p:column style="width:100%">#{p.title}</p:column>  
    </p:autoComplete>
    

    【讨论】:

    • 谢谢,它有帮助。另外我忘了更新 RolesConverter.java 修复它使它一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    相关资源
    最近更新 更多