primefaces datatable row select not work after filtering or sorting

。_饼干妹妹 提交于 2019-12-10 09:45:16

问题


I have a problem with primefaces datatable which implements filtering and sorting and select row(like complexe datatable in primefaces showcases), when i sort or filter in datatable, SelectedElement resolve to null if i select a row, but if i select row without filtering or sorting, select event work perfectly. Sorry for my bad english.

My 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>
    <title>Liste des Prospects</title>

           <style type="text/css">

</style>
</h:head>
<h:body>

<p:layout style="min-width:900px;min-height:400px;" id="layout" fullPage="true"> 
<p:layoutUnit size="50"  position="north" ><ui:include src="/Menus.xhtml" /></p:layoutUnit>

<h:form id="form">

<p:layoutUnit position="center" size="230"  resizable="false" closable="true" collapsible="true"> 

<p:layout>

<p:layoutUnit position="center">

<p:dataTable id="cars" scrollable="true" frozenColumns="4" 
selection="#{prospectBean.selectedProspect}" selectionMode="single" stickyHeader="false" var="listd" 
sortMode="single" widgetVar="ProspectTable" value="#{prospectBean.list}" rowKey="#{listd.idProspect}"
              emptyMessage="Pas de prospects avec ces critères" rowSelectMode="single" filteredValue="#{prospectBean.filteredProspects}">

       <p:ajax  event="rowSelect" listener="#{prospectBean.onRowSelect}" update=":form:Agenda"  />
       <p:ajax event="rowUnselect" listener="#{prospectBean.onRowUnSelect()}"/>
      <p:ajax event="filter" update=":form:cars" />
    <f:facet name="header" >
        <p:outputPanel >
            <h:outputText style="width:150px;" value="Chercher dans tous les camps:" />
            <p:inputText id="globalFilter" onkeyup="PF('ProspectTable').filter()" style="width:150px;" placeholder="Enter keyword"/>
            <p:commandButton action="#{prospectBean.AjouterProspect()}" style="width:12%;float: left;height:8%" ajax="false" icon="ui-icon-circle-plus" />
        </p:outputPanel>
    </f:facet>

            <p:column width="14" >  
    <p:commandButton action="#{prospectBean.ModifierProspect(listd)}" style="width:15px;height:15px" ajax="false" icon="ui-icon-pencil"/>
            </p:column>

    <p:column width="140"  sortBy="#{listd.raisonsociale}" headerText="Raison Sociale" filterBy="#{listd.raisonsociale}" filterMatchMode="contains" filterStyle="display:none">  
        <h:outputText value="#{listd.raisonsociale}"/>
    </p:column>  

    <p:column width="140" sortBy="#{listd.raisonsocialeabrg}" headerText="RS Abrégé"  filterBy="#{listd.raisonsocialeabrg}" filterMatchMode="contains" filterStyle="display:none">  
       <h:outputText value="#{listd.raisonsocialeabrg}"/>  
    </p:column>  

    <p:column width="140" sortBy="#{listd.telephone}"  headerText="Téléphone" filterBy="#{listd.telephone}" filterStyle="display:none">  
        <h:outputText  value="#{listd.telephone}"/> 
    </p:column>  

    <p:column width="140" sortBy="#{listd.telephone2}" headerText="Téléphone 2" filterBy="#{listd.telephone2}" filterStyle="display:none">  
        <h:outputText  value="#{listd.telephone2}"/> 
    </p:column>

    <p:column width="140" sortBy="#{listd.fax}" headerText="Fax" filterBy="#{listd.fax}" filterStyle="display:none">  
        <h:outputText  value="#{listd.fax}"/> 
    </p:column>    

    <p:column width="190" sortBy="#{listd.siteWeb}" headerText="Site Web" filterBy="#{listd.siteWeb}" filterStyle="display:none">  
        <h:outputText  value="#{listd.siteWeb}"/> 
    </p:column>  

    <p:column width="190" sortBy="#{listd.email}" headerText="Email" filterBy="#{listd.email}"  filterMatchMode="contains" filterStyle="display:none">  
        <h:outputText  value="#{listd.email}"/>
    </p:column> 

     <p:column width="140" sortBy="#{listd.ville}" headerText="Ville" filterBy="#{listd.ville}" filterMatchMode="contains" filterStyle="display:none">  
        <h:outputText value="#{listd.ville}"/>  
    </p:column>

    <p:column width="140" sortBy="#{listd.pays}" headerText="Pays" filterBy="#{listd.pays}" filterMatchMode="contains" filterStyle="display:none" >  
        <h:outputText value="#{listd.pays}"/>
    </p:column> 

    <p:column width="140" sortBy="#{listd.chiffreaffaire}" headerText="Chiffre d'affaire" filterBy="#{listd.chiffreaffaire}" filterMatchMode="contains" filterStyle="display:none">  
        <h:outputText value="#{listd.chiffreaffaire}"/>
    </p:column>

    <p:column width="140" sortBy="#{listd.activite}" headerText="Activite" filterBy="#{listd.activite}" filterMatchMode="contains" filterStyle="display:none">  
        <h:outputText value="#{listd.activite}"/>
    </p:column>

    <p:column width="140" sortBy="#{listd.secteur}" headerText="Secteur" filterBy="#{listd.secteur}" filterMatchMode="contains" filterStyle="display:none">  
        <h:outputText value="#{listd.secteur}"/>
    </p:column>

    <p:column width="140" sortBy="#{listd.statut.denomination}" headerText="Statut" filterBy="#{listd.statut.denomination}" filterMatchMode="contains" filterStyle="display:none">  
        <h:outputText value="#{listd.statut.denomination}"/>
    </p:column> 

      </p:dataTable>  
 </p:layoutUnit>

<p:layoutUnit position="south" size="322"  resizable="false" closable="true" collapsible="true">  


<p:dataTable id="Agenda" scrollable="false" filteredValue="#{AgendaBean.filteredAgenda}"
selectionMode="single"  var="lista" sortMode="single" 
            widgetVar="AgendaTable" value="#{AgendaBean.list}" rowKey="#{lista.id}"  
              emptyMessage="Pas d'événement avec ces critères"  > 


    <f:facet name="header" >
        <p:outputPanel >
            <h:outputText style="width:150px;" value="Chercher dans tous les camps:" />
            <p:inputText id="globalFilter" onkeyup="PF('AgendaTable').filter()" style="width:150px;" placeholder="Enter keyword"/>
            <p:commandButton action="#{AgendaBean.AjouterAgenda()}" rendered="#{prospectBean.checked}" style="width:12%;height:6%;float: left;" ajax="false" icon="ui-icon-circle-plus" />
        </p:outputPanel>
    </f:facet>
    <p:column width="17" >  
    <p:commandButton action="#{AgendaBean.ModifierAgenda(lista)}" style="width:15px; height:17px" ajax="false" icon="ui-icon-pencil"/>
    </p:column>

    <p:column  sortBy="#{lista.dateHeure}" width="170" headerText="Date Heure" filterBy="#{lista.dateHeure}" filterMatchMode="contains" filterStyle="display:none" >  
        <h:outputText id="id01" value="#{lista.dateHeure}"/>
    </p:column>  

    <p:column sortBy="#{lista.natureevenement.libelle}" headerText="Nature" filterBy="#{lista.natureevenement.libelle}" filterMatchMode="contains" filterStyle="display:none">  
       <h:outputText id="id11" value="#{lista.natureevenement.libelle}"/>  
    </p:column>  

    <p:column sortBy="#{lista.intervenant.nom}" headerText="Intervenant" filterBy="#{lista.intervenant.nom}" filterMatchMode="contains" filterStyle="display:none" >  
        <h:outputText id="id21" value="#{lista.intervenant.nom}"/> 
    </p:column>

    <p:column sortBy="#{lista.statut.denomination}" headerText="Statut" filterBy="#{lista.statut.denomination}" filterMatchMode="contains" filterStyle="display:none" >  
        <h:outputText id="id31" value="#{lista.statut.denomination}"/>
    </p:column> 

    <p:column sortBy="#{lista.duree}" width="70" headerText="Duree" filterBy="#{lista.duree}" filterMatchMode="contains" filterStyle="display:none">  
        <h:outputText id="id41" value="#{lista.duree}"/>  
    </p:column>

    <p:column sortBy="#{lista.lieu}" width="170" headerText="Lieu" filterBy="#    {lista.lieu}" filterMatchMode="contains" filterStyle="display:none">  
        <h:outputText id="id61" value="#{lista.lieu}"/>  
    </p:column>
      </p:dataTable>    
      </p:layoutUnit>
      </p:layout>
      </p:layoutUnit>
      </h:form>
      </p:layout>
</h:body>
</html>

MyBean

@ManagedBean(name="prospectBean")
@SessionScoped
public class ProspectBean implements Serializable {



/**
 * 
 */
private static final long serialVersionUID = 1L;
....
public void onRowSelect(SelectEvent se)
{
    setProspect(getSelectedProspect());
    agendabean.setProspect(getSelectedProspect());

    checked=true;
try{
    AgendaBean.AfficherAgendas(getProspect());
}catch(Exception e){e.printStackTrace();}
System.out.print("ca marche encore");
}
public void onRowUnSelect(SelectEvent se)
{
    checked=false;
}

//agendabean.setProspect(getSelectedProspect()); resolve to null pointer exception 

java.lang.NullPointerException
at Interface.AgendaBean.AfficherAgendas(AgendaBean.java:508)
at Interface.ProspectBean.onRowSelect(ProspectBean.java:775)

Very sorry for my bad english :p thanks !

来源:https://stackoverflow.com/questions/23761333/primefaces-datatable-row-select-not-work-after-filtering-or-sorting

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!