tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
746
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Fools Fools ist offline Mitglied Bronze
    Registriert seit
    Aug 2010
    Beiträge
    26
    Hallo Allerseits!


    Leider finde ich sowohl im Netz als auch in Büchern nicht wirklich Rat und langsam erschleicht sich mir das Gefühl, dass entweder irgendwas richtig faul ist oder ich bin einfach unfähig!


    Folgendes Szenario:

    Mal angenommen ich habe eine JSF-Seite (.xhtml-Datei), die mehrere Eingabefelder (<h:inputText... />) besitzt, die ihre Werte in verschiedenen Backing Beans/Managed Beans (Java-Klassen) übermittelt. Zum Beispiel ein Feld für den Nachnamen (mit der dazugehörigen Java-Klasse: Personal.java) und ein Feld für den bestellten Artikel (mit der dazugehörigen Java-Klasse: Warenkorb.java). Außerdem besitzt die Seite ein Save-Button, der wenn er betätigt wird die eingegebenen Daten in die Datenbank speichern soll (mit der dazugehörigen Java-Klasse: Jdbc.java).


    Code der JSF-Seite:
    HTML-Code:
    <table>
      <tr>
        <td><h:inputText id="Nachname" value="#{personal.nachname}" /></td>
      </tr>
      <tr>
        <td><h:inputText id="Artikel" value="#{warenkorb.artikel}" /></td>
      </tr>
      <tr>
        <td><h:commandButton action="#{jdbc.insertDataIntoDB}" value="Save" /></td>
      </tr>
    </table>
    Code der Personal.java-Klasse:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    @ManagedBean (name = "personal")
    @SessionScoped
    public class Personal
    {
       private String nachname;
     
       public String getNachname()
       {
          return nachname;
       }
     
       public void setNachname(String nachname)
       {
         this.nachname = nachname;
       }
    }

    Code der Warenkorb.java-Klasse:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    @ManagedBean (name = "warenkorb")
    @SessionScoped
    public class Warenkorb
    {
       private String artikel;
     
       public String getArtikel()
       {
          return artikel;
       }
     
       public void setArtikel(String artikel)
       {
         this.artikel = artikel;
       }
    }

    Code der Jdbc.java-Klasse:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    @ManagedBean (name = "jdbc")
    @SessionScoped
    public class Jdbc
    {
       public String insertDataIntoDB()
       {
          Connection conn = null;
          Statement  stmt = null;
          
          try
          {
             Class.forName("com.mysql.jdbc.Driver");
             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_xyz", "username", "pw");
             stmt = conn.createStatement();
             stmt.executeUpdate("INSERT INTO db_xyz.tbl_bestellungen (Nachname, Artikel) VALUES (" + nachname + "," + artikel + ");");
          }
          ...
    }


    Bitte im Code der Jdbc-Klasse die letzte Zeile (stmt.executeUpdate) ignorieren. Die funktioniert natürlich so nicht, da ich schlecht einfach "nachname" und "artikel" schreiben kann ohne dass die Variablen/Werte der Jdbc-Klasse bekannt sind.

    Und genau hier ist eben mein Problem!
    Wie komme ich in meiner Jdbc-Klasse an die von mir eingegebenen Daten (Nachname und Artikel)?


    Info: Ich möchte ungern all Variablen und all meine Logik in eine einzige Java-Klasse packen.


    Ich wär Euch super dankbar, wenn ihr mir diesbezüglich weiterhelfen könntet.



    Viele Grüße und vielen Dank im Voraus.
    Geändert von Fools (13.09.10 um 12:54 Uhr)
     

  2. #2
    Fools Fools ist offline Mitglied Bronze
    Registriert seit
    Aug 2010
    Beiträge
    26
    Also, so hüftsteif kann JSF 2.0 doch nicht sein?!

    Bringt mir da z. B. die Annotation @Inject etwas? Oder hat das mit meinem Problem eher weniger zu tun?
     

  3. #3
    Avatar von Sentoo
    Sentoo Sentoo ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Brühl
    Beiträge
    131
    Hallo Fools,

    mit Dependency Injection liegst Du an der Stelle gar nicht so falsch. Als Bordmittel gibt es @ManagedProperty. Ich denke das würde in deinem Fall reichen.

    Wie, das kannst Du z.B. in diesem Artikel nachlesen. Die Abschnitte "Using Managed Properties" und "Dependency Injection" solltest Du lesen.

    Du müsstest also
    • die Klasse Jdbc um 2 Attribute ergänzen
    • die Attribute mit der Annotation versehen
    • die getter und setter bereitstellen
    fertig.
     

  4. #4
    Fools Fools ist offline Mitglied Bronze
    Registriert seit
    Aug 2010
    Beiträge
    26
    Hallo Sentoo,

    hab dein Posting leider etwas zu spät gelesen, da ich nicht mehr damit gerechnet habe, dass noch jemand zurück schreibt.

    Aber ich kann bestätigen, dass du mit @ManagedPorperty völlig recht hast. Damit hat es funktioniert!

    Vielen Dank.
     

Ähnliche Themen

  1. Interaktion JSP<->Java-Klasse
    Von karstenkurt im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 4
    Letzter Beitrag: 06.02.08, 10:09
  2. Interaktion zwischen C# und ASP.NET
    Von xloouch im Forum .NET Web und Kommunikation
    Antworten: 3
    Letzter Beitrag: 23.01.08, 12:32
  3. Werteübergabe bei mehreren gleichen Feldern
    Von devconproductions im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 23.02.06, 19:41
  4. JSkype Java API zu Interaktion mit Skype
    Von Thomas Darimont im Forum Java
    Antworten: 0
    Letzter Beitrag: 29.10.05, 21:21
  5. interaktion zwischen 2 programmen
    Von andreas_gierisch im Forum C/C++
    Antworten: 32
    Letzter Beitrag: 25.08.05, 08:45