1

my Problem is, that when i click the row edit-icon next to the row and make a change and after that i click the check-icon, nothing happens. But if i click the cancel-icon and the rowEditCancel event i running, i get the message in the p:growl component.

This is my view code:

<p:dataTable value="#{mainBean.liste}" styleClass="tabelle"
                    var="daten" editable="true" rows="6"
                    emptyMessage="Keine Daten bisher Erfasst"
                    widgetVar="erfasstTabelle" paginator="true" resizableColumns="true"
                    paginatorPosition="bottom" id="tabelleUebersicht"
                    paginatorTemplate=" {CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}  Direkt zu Seite: {JumpToPageDropdown}"
                    currentPageReportTemplate="Seite: {currentPage} von {totalPages}"
                    filteredValue="#{mainBean.gefiltert}">

    <p:ajax event="rowEdit" listener="#{mainBean.onRowEdit}" update=":myForm:msgs :myForm:tabelleUebersicht" />
    <p:ajax event="rowEditCancel" listener="#{mainBean.onRowCancel}" update=":myForm:msgs :myForm:tabelleUebersicht" />

    <f:facet name="header">
        <p:outputPanel>
            <h:outputText value="Alle Felder durchsuchen" />
            <p:inputText id="globalFilter"
                onkeyup="PF('erfasstTabelle').filter()" style="width:150px"
                placeholder="Suchbegriff" />
        </p:outputPanel>
    </f:facet>
    <p:column headerText="AVS ID" filterMatchMode="startsWith" filterBy="#{daten.nummer}">
        <p:cellEditor>
            <f:facet name="output">
                <h:outputText value="#{daten.nummer}" />
            </f:facet>
            <f:facet name="input">
                <p:inputText id="nummerIn" value="#{daten.nummer}"
                    style="width:100%" />
            </f:facet>
        </p:cellEditor>
    </p:column>
    <p:column headerText="Rechtsform" filterMatchMode="startsWith" filterBy="#{daten.rechtsform}">
        <p:cellEditor>
            <f:facet name="output">
                <h:outputText value="#{daten.rechtsform}" />
            </f:facet>
            <f:facet name="input">
                <p:inputText id="rechtsfIn" value="#{daten.rechtsform}" style="width:100%" />
            </f:facet>
        </p:cellEditor>                 
    </p:column>
     <p:column headerText="Rechtsf.Speziell">
        <p:cellEditor>
            <f:facet name="output"><h:outputText value="#{daten.rechtSpeziell}" /></f:facet>
            <f:facet name="input">
            <p:selectOneMenu value="#{daten.rechtSpeziell}" style="width:100%">
                 <f:selectItems value="#{mainBean.rechteGenau}" var="r" itemLabel="#{r}" itemValue="#{r}"/>
            </p:selectOneMenu>
            </f:facet>
        </p:cellEditor>
    </p:column>
    <p:column headerText="Erfasser" filterMatchMode="startsWith" filterBy="#{daten.erfasser}">
        <p:cellEditor>
            <f:facet name="output"><h:outputText value="#{daten.erfasser}" /></f:facet>
            <f:facet name="input">
            <p:selectOneMenu value="#{daten.erfasser}" style="width:100%">
                 <f:selectItems value="#{mainBean.erfassers}" var="e" itemLabel="#{e}" itemValue="#{e}"/>
            </p:selectOneMenu>
            </f:facet>
        </p:cellEditor>
    </p:column>
    <p:column headerText="Datum">
    <p:cellEditor>
            <f:facet name="output">
                <h:outputText value="#{daten.datum}" />
            </f:facet>
            <f:facet name="input">
                <p:inputText id="datumIn" value="#{daten.datum}" style="width:100%" />
            </f:facet>
        </p:cellEditor>     
    </p:column>
    <p:column style="width:32px">
        <p:commandLink value="löschen" styleClass="ui-icon ui-icon-trash" />
    </p:column>
    <p:column style="width:32px">
        <p:rowEditor />
    </p:column>
</p:dataTable>

And this is my bean

@ManagedBean
@ViewScoped
public class MainBean implements Serializable{
    private static final long serialVersionUID = 1L;
    private ErfasstDAO erfasstDAO;  
    private List<Erfasst> liste;
    private List<Erfasst> gefiltert;
    private List<String> erfasser;
    private boolean neu;
    private List<String> rechtSpeziell;
    private List<String> rechteGenau;
    //Neuanlage
    private Long nummer = null;
    private FindeId findeId;
    private String recht;
    private List<String> rechtsformen;
    private String rechtDetail = "";
    private Date datum;
    private String notiz = "";
    private List<String> erfassers;

    @PostConstruct
    private void init(){
        findeId = new FindeId();
        erfasstDAO = new ErfasstDAO();

        erfasser = new ArrayList<>();
        erfasser.add("Benjamin");
        erfasser.add("Uwe");
        erfasser.add("Rolf");

        liste = erfasstDAO.alleEintraege();


        rechteGenau = new ArrayList<String>();
        rechteGenau.add(" ");
        rechteGenau.add("Vollständig");
        rechteGenau.add("Unterlagen gezogen");
        rechteGenau.add("Identifizierung/-wB-Ermittlung durch CP");

        rechtsformen = new ArrayList<>();
        rechtsformen.add("natürliche Person");
        rechtsformen.add("juristische Person");


        erfassers = new ArrayList<>();
        erfassers.add("Benjamin");
        erfassers.add("Uwe");
        erfassers.add("Rolf");
    }

    public void setRechteGenau(List<String> rechteGenau) {
        this.rechteGenau = rechteGenau;
    }

    public void setErfassers(List<String> erfassers) {
        this.erfassers = erfassers;
    }

    public void inputListener(AjaxBehaviorEvent event) {
        if (event != null) {

            UIInput input = (UIInput) event.getComponent();
            Long id = (Long) input.getValue();

            if (id != 0) {
                if (findeId.finden(id) != null) {

                    FacesMessage m = new FacesMessage(
                            FacesMessage.SEVERITY_ERROR, "Vorhanden",
                            findeId.finden(id) + " bereits vorhanden");
                    FacesContext.getCurrentInstance().addMessage(null, m);
                } else {

                    FacesMessage m = new FacesMessage(
                            FacesMessage.SEVERITY_INFO, "Noch frei", id
                                    + " noch nicht vergeben!");
                    FacesContext.getCurrentInstance().addMessage(null, m);
                }
            }

        }

    }

    public void speichern() {
        Erfasst er = new Erfasst();
        er.setNummer(nummer);
        er.setErfasser("Benjamin");
        er.setRechtsform(recht);
        er.setDatum(datum); 
        er.setRechtSpeziell(rechtDetail);   
        er.setNotiz(notiz);

        if(erfasstDAO.neu(er))
        {
            FacesMessage m = new FacesMessage(
                    FacesMessage.SEVERITY_INFO, "Angelegt", String.valueOf(nummer));
            FacesContext.getCurrentInstance().addMessage(null, m);  
        }

        liste = erfasstDAO.alleEintraege();
    }




    public void onRowEdit(RowEditEvent event) {

          if(erfasstDAO.abgeaendert((Erfasst) event.getObject()))
          {
          FacesMessage msg = new FacesMessage("Geändert", String.valueOf(((Erfasst) event.getObject()).getNummer()));
          FacesContext.getCurrentInstance().addMessage(null, msg);
          }
          else
          {
             FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Fehler", "Beim ändern von: " + String.valueOf(((Erfasst) event.getObject()). getNummer()  + " ist ein Fehler aufgetreten"));
             FacesContext.getCurrentInstance().addMessage(null, msg);
          }

          liste = erfasstDAO.alleEintraege();
    }

    public void onRowCancel(RowEditEvent event) {
        FacesMessage msg = new FacesMessage("Bearbeitung abgebrochen", String.valueOf(((Erfasst) event.getObject()).getNummer()));
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }


    public boolean isNeu() {
        return neu;
    }


    public void setNeu(boolean neu) {
        this.neu = neu;
    }

    public List<String> getRechtSpeziell() {
        return rechtSpeziell;
    }

    public void setRechtSpeziell(List<String> rechtSpeziell) {
        this.rechtSpeziell = rechtSpeziell;
    }

    public Long getNummer() {
        return nummer;
    }

    public void setNummer(Long nummer) {
        this.nummer = nummer;
    }

    public String getRecht() {
        return recht;
    }

    public void setRecht(String recht) {
        this.recht = recht;
    }

    public List<String> getRechtsformen() {
        return rechtsformen;
    }

    public void setRechtsformen(List<String> rechtsformen) {
        this.rechtsformen = rechtsformen;
    }

    public String getRechtDetail() {
        return rechtDetail;
    }

    public void setRechtDetail(String rechtDetail) {
        this.rechtDetail = rechtDetail;
    }

    public Date getDatum() {
        return datum;
    }

    public void setDatum(Date datum) {
        this.datum = datum;
    }

    public String getNotiz() {
        return notiz;
    }

    public void setNotiz(String notiz) {
        this.notiz = notiz;
    }

    public List<String> getRechteGenau() {
        return rechteGenau;
    }

    public List<String> getErfassers() {
        return erfassers;
    }


    public List<Erfasst> getListe() {
        return liste;
    }

    public List<Erfasst> getGefiltert() {
        return gefiltert;
    }

    public void setGefiltert(List<Erfasst> gefiltert) {
        this.gefiltert = gefiltert;
    }
}
user3515460
  • 159
  • 1
  • 13

1 Answers1

0

I noticed you don't update the dataTable on rowEdit, only on rowCancel. Have you debugged your rowEdit method? Does the action in your jsf page call the method in backing bean? Have you tried changing the scope of your bean?

  • Now i have debugged my code. Only the onRowCancel Method in the Bean is called. The onRowEdit not. – user3515460 Nov 11 '15 at 18:24
  • @user3515460 I can't verify your code right now because I'm at work, but this issue may help you: http://stackoverflow.com/questions/28059817/bean-method-on-rowedit-event-of-pdatatable-is-not-invoked – Edylle Landy Nov 11 '15 at 18:49
  • In my @PostConstruct i fill my table with this line liste = erfasstDAO.alleEintraege(); – user3515460 Nov 11 '15 at 20:48
  • I think i should more explain the problem. So when i clicked the edit-icon i can enter in each cell a text or whatever. BUT when i want to save my edits and click on the check-Icon the Editor of each cell dosen't close. So each cell has still the edit Input field.For a test i also set the listener of the rowEdit to the same Method, which works fine, as the rowEditCancel, but it dosen't work. So only the cancel Icon works fine. – user3515460 Nov 11 '15 at 21:14