Проблема фильтра Primefaces datatable с сохранением значений объектов, когда фильтр не возвращает строк

#primefaces #primefaces-datatable

#primefaces #primefaces-datatable

Вопрос:

Я использую primefaces (6.2) datatable, при использовании фильтра столбцов я наблюдаю странное поведение, хотя все столбцы (с outputText, inputText) сохраняют значение объекта, столбцы с ‘selectOneMenu’, ‘selectBooleanCheckbox’ не сохраняют значение объекта и возвращают значение null, false. Проблема возникает только при выполнении фильтра, и filer не возвращает строк, если фильтр возвращает хотя бы одну строку, все выглядит нормально, и все столбцы работают нормально. пожалуйста, найдите ниже фрагмент кода, который я использую для устранения неполадок, я действительно ценю любые входные данные для решения этой проблемы.

XHTML

     <html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:c="http://java.sun.com/jstl/core">
<h:body>

<h:form id="frmClientDetails">
                            <p:dataTable 
                                        value="#{myBean.lstContact}" var="varContact" 
                                        rowStyleClass="#{varContact.strRowCSS}">
                                <p:column width="180" headerText="Sal">
                                    <p:selectOneMenu value="#{varContact.strSalutation}">
                                    <f:selectItem itemLabel="--Select one--" itemValue=""></f:selectItem>
                                    <f:selectItem itemLabel="DR" itemValue="DR"></f:selectItem>
                                    <f:selectItem itemLabel="MISS" itemValue="MISS"></f:selectItem>
                                    <f:selectItem itemLabel="MRS" itemValue="MRS"></f:selectItem>
                                    <f:selectItem itemLabel="MR" itemValue="MR"></f:selectItem>
                                    <f:selectItem itemLabel="MS" itemValue="MS"></f:selectItem>
                                    </p:selectOneMenu>
                                </p:column>
                                <p:column width="200" filterBy="#{varContact.strFirstName}" headerText="First Name">
                                    <p:inputText maxlength="2000" value="#{varContact.strFirstName}"/>
                                </p:column>
                                
                               </p:dataTable>
 
                            </h:form>

        </h:body>
</html>
  

ManagedBean

 import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.inject.Named;
import org.springframework.context.annotation.Scope;
import com.model.Contact;
@Named("myBean")
@Scope("view")
public class MyBean extends BaseManagedBean {
    private List<Contact> lstContact;

    @PostConstruct
    public void init() {
        lstContact = new ArrayList<Contact>();
        Contact obj1 = new Contact();
        obj1.setStrSalutation("MR");
        obj1.setStrFirstName("AAA");

        Contact obj2 = new Contact();
        obj2.setStrFirstName("BBB");
        
        Contact obj3 = new Contact();
        obj3.setStrSalutation("MR");
        obj3.setStrFirstName("CCC");
        lstContact.add(obj1);
        lstContact.add(obj2);
        lstContact.add(obj3);
    }
    
    public List<Contact> getLstContact() {
        return lstContact;
    }

    public void setLstContact(List<Contact> lstContact) {
        this.lstContact = lstContact;
    }
}
  

Если я просто введу ‘X’ во втором столбце (имя) фильтра и удалю ‘X’, все значения в первом столбце (приветствие) исчезнут.

Комментарии:

1. У меня были странные проблемы с сортировкой / фильтрацией, которые возникали у меня и с данными Primefaces. Для меня объект row необходим для реализации ‘Serializable’, поэтому посмотрите, реализует ли ‘Contact’ ‘Serializable’, а если нет, попробуйте добавить его и посмотреть, поможет ли это.

2. @MrChris Спасибо за ваши комментарии, возникла проблема с командой primefaces. github.com/primefaces/primefaces/issues/6427