2016-08-02 29 views
0

Kann mir bitte jemand sagen, was ich falsch mache? Ich möchte einfach ein Objekt aus einem SQLContainer auswählen, das mit Vaadin als Gitterobjekt angezeigt wird. Ich möchte im Grunde ein Formular mit dem Inhalt des ausgewählten Artikels füllen, damit ich den Artikel vor dem Speichern bearbeiten kann (Standard CRUD).getItem() gibt NULL mit SQLContainer nach Auswahl im Rasterobjekt zurück, aber die Zeile existiert

Die Bausteine:

 String q4text = "select a.name, aty.name " 
       + "from asset a " 
       + "join assettype aty on a.assettype_id = aty.id"; 
     FreeformQuery q4 = new FreeformQuery(q4text, connectionPool, "a.id"); 
     q4.setDelegate(new AssetQueryDelegate()); 
     assetContainer = new SQLContainer(q4); 

Das ist mein SQLContainer mit dem FreeformQuery. Im Snippet sehen Sie "a.id" als Primärschlüssel. Ich habe "ID" und "ID" in der Vergangenheit versucht. Das Ergebnis ist das gleiche. Auf diesen Container kann über einen DatabaseHelper zugegriffen werden, und ich binde ihn an ein Rasterobjekt.

SQLContainer assetContainer = db.getAssetContainer(); 
grid.setContainerDataSource(assetContainer); 

Nun, ich versuche, das Formular zu füllen mit dem folgenden Code

grid.addSelectionListener(event -> { 
     if (event.getSelected().isEmpty()) { 
      form.setVisible(false); 
     } else { 
      Set<Object> selected = event.getSelected(); 
      Item item = assetContainer.getItem(new Object[] {selected}); 
      form.setCustomer(item); 
     } 
    }); 

Snippet Wenn ich den Web-App laufe, kann ich die Gitter Inhalte sehen und wir sortieren. Das Problem tritt auf, wenn ich eine Zeile auswähle und die Funktion getItem aufruft. Ich werde immer null. Ich habe auch mit AssetContainer.getItem (ausgewählt) versucht. Wenn ich es durch den Debugger laufe, sehe ich tatsächlich die rowId (äquivalent zu einer.Id) im ausgewählten Set. Wenn ich den assetContainer auf den Bildschirm drucke, sehe ich auch den Inhalt und ich kann das Element sehen, das ich erwarten würde auszuwählen, aber das Ergebnis ist immer null. Benutze ich die falsche Funktion? Gibt es ein Problem mit dem Primärschlüssel in der FreeformQuery? Ich entwarf die Tabelle mit MYSQL, und es gibt zwei Primärschlüssel mit der Namens-ID in den Asset- und den Assettype-Tabellen (natürlich möchte ich, dass Asset.id der Primärschlüssel dieser Abfrage ist, nicht assittype.id).

Vielen Dank im Voraus

Antwort

0

Am Ende war es leichter als ich erwartet hatte (nachdem die Dinge fast 1 Tag damit verbringen,).

grid.addSelectionListener(event -> { 
     if (event.getSelected().isEmpty()) { 
      form.setVisible(false); 
     } else { 
      Item item = assetContainer.getItem(event.getSelected().iterator().next()); 
      form.setCustomer(item); 
     } 
    }); 
+0

ich sehe. getItem() erwartet eine ItemId als Parameter. Du hast vorher ein Set ItemIds übertragen;) – d2k2