0 votes
asked in RapidClipse Programmierung by
Gibt es ein Beispiel über das Zusammenspiel Grid -> binder->  FormLayout: save, new, update, delete?

Habe auf einer Seite ein Grid und eine über binder verbundene Form.
Selektieren, editieren funktioniert.
Suche aber nach Beispielcode, wie die oben aufgeführten Funktionen mit dem binder umgesetzt werden können.

Vorab vielen Dank!

2 Answers

0 votes
answered by (1.3k points)
Ich würde hier mal reinschauen: https://youtu.be/dVwoLXO-SGk
+1 vote
answered by
Von einen Binder kann ganz einfach mit getBean() und setBean() ein Objekt in den Binder gesetzt werden.

Die Felder des gesetzten Objektes werden sofort in den UI-Feldern angezeigt. Wenn die Werte im UI verändert werden, werden auch die Instanzfelder des gesetzten Objektes verändert. Das heißt: Wenn der Benutzer speichern/delete/update klickt, kann einfach das gesetzte Objekt per getBean() gelesen werden um das dann in die Datenbank zu speichern/deleten oder zu updaten.

Um z.B. das ausgewählte Element eines Grids in einen Binder zu schreiben kann wie folgt vorgegangen werden:

final Customer selectedCustomer = this.grid.getSelectedItems().stream().findFirst().get();

binder.setBean(selectedCustomer);
commented by
hmmm...
ich hatte das inzwischen wie folgt gelöst.
Wenn ich aber die Antwort richtig verstehe, dann nutze ich den Binder falsch - richtig?

    private void btnSave_onClick(final ClickEvent<Button> event)
    {
        try
        {
            final OkmDbMetadataValue regaldata = new OkmDbMetadataValue();
            this.txtDmvTable.setValue("T_Regal");
            regaldata.setDmvTable(this.txtDmvTable.getValue());
            regaldata.setDmvCol00(this.txtPosition.getValue());
            regaldata.setDmvCol01(this.txtRegalplatz.getValue());
            regaldata.setDmvCol02(this.txtKurzbez.getValue());
            regaldata.setDmvCol03(this.txtBeschreibung.getValue());
            if(!this.nrDmvId.isEmpty())
            {
                regaldata.setDmvId(this.nrDmvId.getValue().longValue());
                this.logger.info("Der Datensatz mit der ID soll gespeichert werden: " + this.nrDmvId.getValue().toString());

            }
            if(this.binder.validate().isOk())
            {
                this.binder.writeBean(regaldata);
                final OkmDbMetadataValue savedRd = new OkmDbMetadataValueDAO().save(regaldata);

                this.logger.info(savedRd.toString());
               
                this.grdRegale.getDataProvider().refreshAll();
                this.grdRegale
                .setDataProvider(DataProvider.ofCollection(OkmDbMetadataValueDAO.INSTANCE.findAllRegal()));
                this.binder.readBean(null);
                this.filterComponent.connectWith(this.grdRegale.getDataProvider());
                this.filterComponent.setFilterSubject(GridFilterSubjectFactory.CreateFilterSubject(this.grdRegale,
                    Arrays.asList("dmvCol02", "dmvCol03", "dmvCol01", "dmvCol00"),
                    Arrays.asList("dmvCol00", "dmvCol01", "dmvCol02", "dmvCol03")));

                this.btnDelete.setVisible(false);
                this.btnSave.setVisible(false);
                this.fiRegalplatz.setVisible(false);
                this.fiposition.setVisible(false);
                this.fiKurzBez.setVisible(false);
                this.fiBeschreibung.setVisible(false);
                this.frmRegale.setVisible(false);

            }

        }
        catch(final ValidationException e)
        {
            e.printStackTrace();
        }
    }
commented by
read/writeBean funktioniert natürlich auch. Soweit ich sehen kann könnte man oben die regeldata.set... Aufrufe mit dem this.binder.writeBean(regaldata); ersetzen. Das würde dann eine Exception schmeißen, falls die Validation fehlschlägt.

Der Unterschied mit read/write zu get/setBean ist, dass mit read/write kein Objekt intern gesetzt wird, sondern nur die Felder gelesen/geschrieben werden.
Welcome to Rapidclipse Q&A, where you can ask questions and receive answers from other members of the community.
Powered by Question2Answer
...