Question

In my application I am using ViewScoped Bean and it does not show selected row when a row is selected in primefaces datatable. But if I changed the Bean to a SessionScoped Bean then it shows the selected row perfectly.

my code is like below.

 <h:form id="form">  
 <p:growl id="msgs" showDetail="true" />  
 <p:dataTable  var="pMData" rowIndexVar="rowIndex" value="#       {managedBean.dataModel}" selectionMode="single"  paginator="true" rows="100"   
 widgetVar="pMTable" emptyMessage="No Records Found."      filteredValue="#{managedBean.filteredRecords}" selection="#{managedBean.selectedRecord}"      rowKey="#{pMData.cellid}">  

 <p:ajax event="rowSelect" listener="#{managedBean.onRowSelect}"  
 update=":form:display :form:msgs" oncomplete="moreviewDialog.show()" />  
 <p:ajax event="rowUnselect" listener="#{managedBean.onRowUnselect}"              update=":form:msgs"/>  
 <p:column headerText="Cell Name" filterBy="#{pMData.cellid}"              filterStyle="display:none" >  
 <h:outputText value="#{pMData.modifiedCellID}" />  
    </p:column>   
    </p:dataTable>  


    <p:dialog header="History Data" widgetVar="moreviewDialog" resizable="false" id="moreviewDlg"  
    showEffect="fade" hideEffect="explode" modal="true">  

    <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;">  

    <p:lineChart id="category" value="#                {managedBean.createCategoryModel(managedBean.selectedRecord.cellid)}" legendPosition="e"  
 title="NodeB Throughput(kbit/s)" minY="0" maxY="5000" style="height:300px;margin-top:20px"/>  


    </h:panelGrid>  
    </p:dialog>  
    </h:form> 

and my managedBean CDI is like this.

    @Named(value = "managedBean")
    @ViewScoped
    public class ManagedBean implements Serializable {
public void setSelectedRecord(PMData selectedRecord1){
   this.selectedRecord=selectedRecord1;

}

public PMData getSelectedRecord(){

    return  selectedRecord;
}
public void onRowSelect(SelectEvent event) {  


    FacesMessage msg = new FacesMessage("NodeB Selected", String.valueOf(((PMData)     event.getObject()).getCellid()));  

    FacesContext.getCurrentInstance().addMessage(null, msg);  

 }

public void onRowUnselect(UnselectEvent event) {  
FacesMessage msg = new FacesMessage("Row Unselected",((PMData)     event.getObject()).getCellid());  

FacesContext.getCurrentInstance().addMessage(null, msg);  
} 

public PMDataModel getDataModel() {  
    return dataModel;  
} 
public CartesianChartModel createCategoryModel(String key) {  .....}
public List<PMData> getFilteredRecords() {  
    return filteredRecords;  
}  

public void setFilteredRecords(List<PMData> filteredRecords) {  

//        System.out.println("came ");
    this.filteredRecords = filteredRecords;  
}
}

and PMData and PMDataModel classes are working normally. Can someone help me to select the row while still using viewscoped bean.

Was it helpful?

Solution

I think I found the answer. the error is with the dialogbox. I put dynamic=true in dialogbox. Now working perfectly.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top