All Selected when Move to Next Page

UI Components for JSF
Post Reply
grenadadoc
Posts: 34
Joined: 23 Mar 2010, 15:58

01 Dec 2011, 02:29

I have a table based on a MS SQL DB.

Very basic datatable at this point, I'll add to it later...

Problem, is that when I run the web application, all appears well. I can select at will from anywhere in the initial table. The row appears selected and the previously selected row is unselected. Problem comes when I either change the number of rows shown in the datatable, or migrate to any other page (using any of the of paginator arrows or direct page number(s). Only way to get back to a selectable datatable, is hit refresh in my browser (FireFox).

XHTML Code . . .

Code: Select all

 <ui:define name="body">
            <h:form id="form1" styleClass="jsfcrud_odd_row" >
                <p:growl id="growl" sticky="true" showDetail="true" showSummary="true"/>

                <p:panel id="panel1" rendered="true" >
                    <p:dataTable value="#{PtsMBean.lazyModelPts}" var="item" rows="25" rowKey="#{PtsMBean.lazyModelPts}"
                                 rowsPerPageTemplate="25, 50, 100, 200, 500" lazy="true" paginator="true" paginatorPosition="bottom"
                                 paginatorTemplate="{FirstPageLink}{PreviousPageLink}{PageLinks}{NextPageLink}{LastPageLink} {RowsPerPageDropdown}"
                                 selectionMode="single" selection="#{PtsMBean.selected}" id="dtPatients"  >
                        <f:facet name="header">
                            Displaying #{item.getEjbFacade().count()} Patients . . .
                        </f:facet> 
                        <p:column headerText="Patient ID">
                            <h:outputText value="#{item.patientID}"/>
                        </p:column>
                        <p:column headerText="Patient File ID">
                            <h:outputText value="#{item.patientFileID}"/>
                        </p:column>
                        <p:column headerText="Full Name" >
                            <h:outputText value="#{item.fullname}"/>
                        </p:column>
                        <p:column headerText="DOB" style="text-align: center">
                            <h:outputText value="#{item.dob}">
                                <f:convertDateTime dateStyle="medium"/>
                            </h:outputText>
                        </p:column>
                        <p:column headerText="Sex" style="text-align: center">
                            <h:outputText value="#{item.sex}"/>
                        </p:column>
                        <p:column headerText="Race" style="text-align: center">
                            <h:outputText value="#{item.raceId.race}"/>
                        </p:column>
                        <p:column headerText="DOD" style="text-align: center">
                            <h:outputText value="#{item.dod}" rendered="#{item.dod > item.dob}">
                                <f:convertDateTime dateStyle="medium"/>
                            </h:outputText>
                        </p:column>
                    </p:dataTable>
                </p:panel>
            </h:form> 
        </ui:define>
MBean Code . . .

Code: Select all

@ManagedBean(name = "PtsMBean")
@SessionScoped
public class PatientsMBeanJPA implements Serializable {

    Patients item;
    Patients selected;
    List<Patients> itemList;
    LazyDataModel<Patients> lazyModelPts;
    int selectedIndex;
    @EJB
    PatientsQBFacade ejbFacade;

    public LazyDataModel<Patients> getDataModel() {
        return lazyModelPts;
    }

    @PostConstruct
    void createDataModel() {
        lazyModelPts = new LazyDataModel<Patients>() {

            @Override
            public List<Patients> load(int start, int size, String sortField, SortOrder sortOrder, Map<String, String> filters) {
                return getEjbFacade().load(start, size, sortField, sortOrder, filters);
            }
        };
        lazyModelPts.setRowCount(getEjbFacade().count());
    }

    public PatientsQBFacade getEjbFacade() {
        return ejbFacade;
    }

    public void setEjbFacade(PatientsQBFacade ejbFacade) {
        this.ejbFacade = ejbFacade;
    }

    public LazyDataModel<Patients> getLazyModelPts() {
        return lazyModelPts;
    }

    public void setLazyModelPts(LazyDataModel<Patients> lazyModelPts) {
        this.lazyModelPts = lazyModelPts;
    }

    public int getSelectedIndex() {
        return selectedIndex;
    }

    public void setSelectedIndex(int selectedIndex) {
        this.selectedIndex = selectedIndex;
    }

    public Patients getItem() {
        return item;
    }

    public void setItem(Patients current) {
        this.item = current;
    }

    public List<Patients> getItemList() {
        return itemList;
    }

    public void setItemList(List<Patients> itemList) {
        this.itemList = itemList;
    }

    public Patients getSelected() {
        return selected;
    }

    public void setSelected(Patients selected) {
        this.selected = selected;
    }

    public String prepareEdit() {
        item = (Patients) getDataModel().getRowData();
        selectedIndex = getDataModel().getRowIndex();
        return "Edit";
    }

    public String edit() {
        if (item != null) {
            try {
                getEjbFacade().edit(item);
            } catch (Exception e) {
                JsfUtil.addErrorMessage(e, "error");
            }
            JsfUtil.addSuccessMessage("the object'" + item + "' updated");
        } else {
            JsfUtil.addErrorMessage("Object is empty");
        }
        return "Edit";
    }

    public String prepareDelete() {
        item = (Patients) getDataModel().getRowData();
        selectedIndex = getDataModel().getRowIndex();
        return "List";
    }

    public String delete() {
        if (item != null) {
            try {
                //getFacade().remove(item);
            } catch (Exception e) {
                JsfUtil.addErrorMessage(e, " delete error");
            }
            JsfUtil.addSuccessMessage("object deleted");
        } else {
            JsfUtil.addErrorMessage("object is empty");
        }
        createDataModel();
        return "List";
    }

Standard FacesConverter stuff follows . . .
Any ideas ? ? ?

Thanks in advance . . .
PF 3.5
NetBeans 7.2.1
GF 3.1.2
Mojarra 2.1.17

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 27 guests