primefaces: bestätigen der Schaltfläche dialog nicht aufrufen managedbean Methode

Arbeite ich in primefaces 3.3 und jsf 2.0. Ich habe ein problem beim löschen Datensatz in lazy datamodel. Wie die Sortierung und die Filterung funktioniert nicht richtig in die datatable, die ich in Benutzung hatte lazydatamodel Konzept.Speichern Sie nun(durch Assistenten), Bearbeiten,Sortieren und filtern funktionieren. Als ich versuchte zu löschen, Datensatz aus der datatable-dialog erscheint und wenn ich auf ja klicken(command-Taste) Datensatz löschen, anstelle des aufrufenden bean-Methode die Kontrolle geht an load-Methode der lazy-Daten-Modell. deleterecord von clientUitility.java(managedbean) nicht aufrufen. kann jemand mir Anleitung zum löschen Datensatz aus der Datentabelle, die von client-Objekt übergeben
Hier ist ein code-snippet

clientMaster.xhtml

 <h:form id="cm">
                <p:growl life="5000" showDetail="true" showSummary="true" id="mymessage" />
                <p:wizard widgetVar="wiz" flowListener="#{clientUitility.onFlowProcess}" showNavBar="true" >
                    <p:tab id="personal" title="Personal" >
.....
.....//tab and columns
.....

                                        <p:commandButton id="addClient" immediate="true" value="Add Client" actionListener="#{clientUitility.save}" oncomplete="wiz.loadStep (wiz.cfg.steps [0], true)" update=":fce:clientList" > <!-- update="@parent,:cm:clientList" -->
                                        </p:commandButton>
                                    </p:column>
                                </p:row>
                            </p:panelGrid>
                        </p:panel>
                    </p:tab>
                </p:wizard>
            </h:form>
            <ui:include id="ce" src="ClientEditDatatable.xhtml"/>

ClientEditdatatable.xhtml

<h:form id="fce">


        <p:dataTable var="client" value="#{clientUitility.lazyModel}" id="clientList" editable="true" widgetVar="clientTable" rowKey="#{client.clientID}"
                     paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                     paginator="true" rows="10" rowsPerPageTemplate="5,10,15" lazy="true">

            <p:column headerText="First Name" style="width:100px" filterBy="#{client.firstName}" sortBy="#{client.firstName}" >
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{client.firstName}" />
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText id="dtFirstName" value="#{client.firstName}" style="width:100%" label="FirstName" onkeyup="valid(this)" onblur="convertUpper(this.id)"  >
                            <f:validateLength for="dtFirstName" maximum="100" minimum="3"/>
                        </p:inputText>
                    </f:facet>
                </p:cellEditor>
            </p:column>
.....
..... //code of column
.....
            <p:ajax event="rowEdit" listener="#{clientUitility.editRowListner}" update=":cm:mymessage"/>
            <p:column headerText="Delete" style="width:50px">
                <p:commandButton id="deleteClient" value="Delete" onclick="confirmDeleteClient.show()" title="Delete this Client" styleClass="ui-icon-trash">
                    <f:setPropertyActionListener target="#{client}" value="#{clientUitility.client}"/>
                </p:commandButton>
            </p:column>
        </p:dataTable>
        <p:confirmDialog message="Delete client?" severity="alert" widgetVar="confirmDeleteClient" visible="false" appendToBody="true" >
            <p:commandButton value="Yes" update="clientList" immediate="true" oncomplete="confirmDeleteClient.hide()" actionListener="#{clientUitility.deleteRecord}" >
<f:setPropertyActionListener target="#{client}" value="#{client}"
            </p:commandButton>
            <p:commandButton value="No" onclick="confirmDeleteClient.hide()" type="button" />
        </p:confirmDialog>
        <br/>

LazyClientDataModel.java

public class LazyClientDataModel extends LazyDataModel<ClientBean> {
private List<ClientBean> datasource;
public LazyClientDataModel(List<ClientBean> datasource) {
    this.datasource = datasource;
}
@Override
public ClientBean getRowData(String rowKey) {
    for(ClientBean client : datasource) {
        if(Integer.toString(client.getclientID()).equals(rowKey))
            return client;
    }
    return null;
}
@Override
public Object getRowKey(ClientBean client) {
    return Integer.toString(client.getclientID());
}
@Override
public List<ClientBean> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {
    List<ClientBean> data = new ArrayList<ClientBean>();
    //filter
    for(ClientBean client : datasource) {
        boolean match = true;
        for(Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
            try {
                String filterProperty = it.next();
                String filterValue = filters.get(filterProperty);
                String fieldValue = String.valueOf(client.getClass().getField(filterProperty).get(client));
                if(filterValue == null || fieldValue.toLowerCase().startsWith(filterValue.toLowerCase())) {
                    match = true;
                } else {
                    match = false;
                    break;
                }
            } catch(Exception e) {
                match = false;
            }
        }
        if(match) {
            data.add(client);
        }
    }
    //sort
    if(sortField != null) {
        Collections.sort(data, new LazySorter(sortField, sortOrder));
    }
    //rowCount
    int dataSize = data.size();
    this.setRowCount(dataSize);
    //paginate
    if(dataSize > pageSize) {
        try {
            return data.subList(first, first + pageSize);
        }
        catch(IndexOutOfBoundsException e) {
            return data.subList(first, first + (dataSize % pageSize));
        }
    }else {
        return data;
    }
}
}

clientUitility.java (managedbean)

public class ClientUitility {
private LazyDataModel<ClientBean> lazyModel;
private ClientBean client = new ClientBean();
private List<ClientBean> clientAll;//= new ArrayList<ClientBean>();

/** Creates a new instance of ClientUitility */
public ClientUitility() {
    client = new ClientBean();
    clientAll = new ArrayList<ClientBean>();
    //int userID = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("USER_ID").toString());
    clientAll = ClientService.GenerateClientList(1);
    lazyModel = new LazyClientDataModel(clientAll);
}
//setter and getter of client 
//getter for lazymodel
public void deleteRecord(ActionEvent actionEvent) {
    try {
        System.out.println("Delete record Called....");
        int ClientID = client.getclientID();            
        ClientService.DeleteClient(client);
        client = new ClientBean();
        clientAll = ClientService.GenerateClientList(1);
        lazyModel = new LazyClientDataModel(clientAll);
        FacesMessage msg = new FacesMessage("Client Deleted", "");
        FacesContext.getCurrentInstance().addMessage(null, msg);
    } catch (Exception e) {
        e.printStackTrace();
    }
public void save(ActionEvent actionEvent) {
    System.out.println("Save record Called....");
    ClientService.AddClient(client);
    client = new ClientBean();
    clientAll = ClientService.GenerateClientList(1);
    lazyModel = new LazyClientDataModel(clientAll);
    FacesMessage msg = new FacesMessage("Client Created", "");
    FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
Ich durchsuchte Debuggen. beim klicken auf den "löschen" Knopf ruft es getLazyModel Methode der managebean (clientUitility.java). Auch wenn ich auf ja dann auch ruft es die gleichen, aber deleteRecord Methode der bean wird nicht ausgelöst. kann jemand eine Idee, warum es ist wie dieses? oder wie kann ich den trigger-bean-Methode?

InformationsquelleAutor mathaker | 2012-06-14

Schreibe einen Kommentar