Διαδικτυακές Εφαρμογές Ενότητα 3: Ανάπτυξη JavaEE 6 εφαρμογής με JSF2, EJB3 και JPA Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα του ΤΕΙ Δυτικής Μακεδονίας και της Ανώτατης Εκκλησιαστικής Ακαδημίας Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Ανάπτυξη JavaEE 6 εφαρμογής με JSF2, EJB3 και JPA
Σκοποί ενότητας Σε αυτή την ενότητα θα δημιουργήσουμε μια διαδικτυακή εφαρμογή, την CustomerApp η οποία θα εκτελεί μόνο λειτουργίες εισαγωγής και ανάγνωσης δεδομένων, χρησιμοποιώντας το NetBeans, τον Glassfish για application server, την JavaDB (Derby) για βάση δεδομένων. 5
Περιεχόμενα ενότητας (1/2) Εισαγωγή. Δημιουργώντας ένα Enterprise Application Project. Δημιουργώντας τις κλάσεις οντοτήτων από την βάση δεδομένων. Δημιουργώντας το Enterprise Java Beans - Session και Message Driven. 6
Περιεχόμενα ενότητας (2/2) Δημιουργώντας το Customer Managed Bean. Δημιουργία της σελίδας Web για την προβολή των πελατών. Δημιουργία της σελίδας Web για την προβολή των στοιχείων των πελατών. 7
Εισαγωγή (1/3) Η εφαρμογή είναι χωρισμένη σε τρία διαφορετικά επίπεδα. Presentation, Business, Data Access and Data. Η αρχιτεκτονική αυτή βοηθάει στον καθαρό διαχωρισμό των αρμοδιοτήτων, της επαναχρησιμοποίησης και της επεκτασιμότητας μέσω χρήσης των Enterprise Java Beans. 8
Εισαγωγή (2/3) Επίσης με την χρήση των Java Server Face (JSF) και Java Persistence Application (JPA), η ανάπτυξη των γραφικών διεπαφών χρήστη (GUI) είναι εύκολη, όπως επίσης εύκολη είναι και η σύνδεση του αντικειμενοστραφούς προγραμματισμού με τις σχεσιακές βάσεις δεδομένων για την εισαγωγή και λήψη δεδομένων. 9
Εισαγωγή (3/3) Σχήμα 1. Αρχιτεκτονική για τη δημιουργία Java Database. 10
Δημιουργώντας ένα Enterprise Application Project (1/3) Για το συγκεκριμένο παράδειγμα θα χρησιμοποιηθεί η βάση δεδομένων sample. Δημιουργείται αυτόματα με την εγκατάσταση του Netbeans. Σχήμα 2. Δημιουργώντας ένα Enterprise Application Project (1). 11
Δημιουργώντας ένα Enterprise Application Project (2/3) 1. Επιλέξτε File > New Project. Από το παράθυρο Categories, επιλέξετε Java EE και στο Projects επιλέξτε Enterprise Application. Πατήστε Next. 2. Επιλέξτε τη τοποθεσία που θα δημιουργηθεί το project και σαν όνομα επιλέξτε το CustomerApp και πατήστε Next. 3. Επιλέξτε το εγκατεστημένο Glassfish v3 σαν application server, και Java EE 6 για την έκδοση JAVA EE και στο τέλος επιλέξτε Finish. 12
Δημιουργώντας ένα Enterprise Application Project (3/3) Το Netbeans θα δημιουργήσει 3 projects με όνομα CustomerApp (Enterprise Application project), CustomerAppejb (EJB project) και CustomerApp-war (Web project). Σχήμα 3. Δημιουργώντας ένα Enterprise Application Project (2). 13
Δημιουργία κλάσεων οντοτήτων από την βάση δεδομένων (1/7) Πριν από οτιδήποτε άλλο πρώτα θα πρέπει να δημιουργήσουμε τις Entity Class και λόγω του ότι το Session Beans είναι υπεύθυνο για τον χειρισμό των δεδομένων. Η δημιουργεί αυτών των κλάσεων θα γίνει μέσα στο EJB project. 14
Δημιουργία κλάσεων οντοτήτων από την βάση δεδομένων (2/7) 1. Στο Projects view, κάνουμε δεξί κλίκ πάνω στο CustomerApp-ejb project και επιλέγουμε New > Entity Classes from Database. 2. Επιλέγουμε Data Source (Radio button) και από την αναπτυσσόμενη λίστα θα επιλέξουμε New Data Source. 3. Ορίζουμε το Java Naming and Directory Interface (JNDI) με όνομα jdbc/sample, και επιλέγουμε jdbc:derby://localhost:1527/sample [app on APP] σαν Database Connection και πατάμε OK. 15
Δημιουργία κλάσεων οντοτήτων από την βάση δεδομένων (3/7) 4. Από τους διαθέσιμους πίνακες (Available Tables), επιλέγουμε CUSTOMER και πατάμε το κουμπί Add έτσι ώστε να εμφανιστεί στο Selected Tables list box (Σημ. Ο συσχετιζόμενος πίνακας, DISCOUNT_CODE προστίθεται αυτόματα) τέλος πατάμε Next. 16
Δημιουργία κλάσεων οντοτήτων από την βάση δεδομένων (4/7) Σχήμα 4. Δημιουργώντας τις κλάσεις οντοτήτων από την βάση δεδομένων (1). 17
Δημιουργία κλάσεων οντοτήτων από την βάση δεδομένων (5/7) 5. Πατήστε στο κουμπί Create Persistence Unit... επιλέξτε jdbc/sample για το Data Source αφήστε τα υπόλοιπα όπως είναι κι επιλέξτε Create. Σχήμα 5. Οδηγίες. 18
Δημιουργία κλάσεων οντοτήτων από την βάση δεδομένων (6/7) 6. Δώστε ένα όνομα για το πακέτο για παράδειγμα com.customerapp.entity μέσα στο κατάλληλο πεδίο και πατήστε Next. 7. Αλλάξτε το Collection Type σε java.util.list και πατήστε Finish. 8. Προσέξτε τις νέες κλάσεις που δημιουργήθηκαν κάτω από το Source Packages στο παράθυρο προβολής των project. 19
Δημιουργία κλάσεων οντοτήτων από την βάση δεδομένων (7/7) Σχήμα 6. Δημιουργώντας τις κλάσεις οντοτήτων από την βάση δεδομένων (2). 20
Δημιουργία Enterprise Java Beans - Session και Message Driven (1/23) Έχοντας δημιουργήσει τις Entity Classes η επόμενη ενέργειά μας είναι να δημιουργήσουμε την Session (Stateless) Bean, CustomerSession μέσω της οποίας θα χειριζόμαστε και θα παρέχουμε RU λειτουργίες στο αντικείμενο. Στη συγκεκριμένη εφαρμογή που αναπτύσσουμε ο client που θα κάνει χρήση αυτών των συναρτήσεων είναι οι Java Server Pages (JSP) σελίδες. 21
Δημιουργία Enterprise Java Beans - Session και Message Driven (2/23) Θα δημιουργήσουμε επίσης έναν Message-Driven Bean (MDB), NotificationBean ο οποίος θα χρησιμοποιηθεί για τη ανταλλαγή ασύγχρονων μηνυμάτων. 1. Κάνουμε δεξί κλικ πάνω στο CustomerApp-ejb project και επιλέγουμε New > Session Bean... 2. Στον διάλογο New Session Bean, εισάγουμε για το EJB Name το CustomerSession, και για όνομα πακέτου το com.customerapp.ejb, επιλέγουμε Session Type, Stateless και αφήνουμε το Create Interface από επιλεγμένο, για παράδειγμα no Interface (New in EJB 3.1), και πατάμε Finish. 22
Δημιουργία Enterprise Java Beans - Session και Message Driven (3/23) Σχήμα 7. Δημιουργώντας το Enterprise Java Beans - Session και Message Driven. 23
Δημιουργία Enterprise Java Beans - Session και Message Driven (4/23) 3. Κάνουμε δεξί κλικ πάνω στο CustomerApp-ejb project και επιλέγουμε "New > Message-Driven Bean...«. 4. Στον διάλογο New Message-Driven Bean εισάγουμε σαν EJB Name το NotificationBean και για όνομα πακέτου το "com.customerapp.mdb", κάνουμε κλικ στο κουμπί "Add..." button στην επιλογή Project Destination. 5. Στον διάλογο Add Message Destination, επιλέγουμε για Destination Name το NotificationQueue και για Destination Type την Queue και πατάμε OK. 24
Δημιουργία Enterprise Java Beans - Session και Message Driven (5/23) Πατάμε Finish για να ολοκληρωθεί η δημιουργία MDB. Σχήμα 8. Ολοκλήρωση MDB. 25
Δημιουργία Enterprise Java Beans - Session και Message Driven (6/23) 6. Στο παράθυρο Projects view, κάνουμε διπλό κλικ στο στοιχείο CustomerSessionBean item. Σχήμα 9. Δημιουργώντας το Enterprise Java Beans - Session και Message Driven (2). 26
Δημιουργία Enterprise Java Beans - Session και Message Driven (7/23) 7. Κάνουμε δεξί κλικ στο παράθυρο του κώδικα και επιλέγουμε Persistence > Use Entity Manager. Ο σχολιασμός @PersistenceContext θα εισαχθεί αυτόματα, και έτσι ο ΕntityManager, με όνομα, em μπορεί να χρησιμοποιηθεί αμέσως. 8. Δημιουργούμε τις μεθόδους για το Session Bean: Retrieve και Update, κάνοντας δεξί κλικ στον κώδικα, και επιλέγοντας Insert Code..., κάτω από το Generate list, επιλέγουμε Add Business Method. 27
Δημιουργία Enterprise Java Beans - Session και Message Driven (8/23) 9. Στον διάλογο Add Business Method..., υπάρχουν οι Name, Return Type and Parameters για την χρήση των μεθόδων. Σχήμα 10. Επιλογές στο παράθυρο Business Method. 28
Δημιουργία Enterprise Java Beans - Session και Message Driven (9/23) 10.Επαναλαμβάνουμε τα βήματα για την συνάρτηση Update. 11.Επεξεργαστείτε τις μεθόδους, έτσι ώστε να εφαρμόσουν τις επιδιωκόμενες λειτουργίες, όπως φαίνεται στην επόμενη διαφάνεια. 29
Δημιουργία Enterprise Java Beans - Session και Message Driven (10/23) 30
Δημιουργία Enterprise Java Beans - Session και Message Driven (11/23) Τώρα θα εισάγουμε κώδικα για να στέλνουμε το ενημερωμένο αντικείμενο Customer στην ουρά προορισμού. 12. Κάνουμε δεξί κλικ πάνω στον κώδικα και επιλέγουμε "Insert Code...", και "Send JMS Message" από την Generate list. 13. Στον διάλογο Send JMS Message, επιλέγουμε "jms/notificationqueue" σαν Project Destination και κάνουμε κλικ στο ΟΚ. 31
Δημιουργία Enterprise Java Beans - Session και Message Driven (12/23) Παρατηρείστε ότι δημιουργήθηκαν αυτόματα οι δύο μέθοδοι. createjmsmessageforjmsnotificationqueue και sendjmsmessagetonotificationqueue. 32
Δημιουργία Enterprise Java Beans - Session και Message Driven (13/23) 14. Στην μέθοδο update, εισάγουμε κώδικα για να καλέσουμε την sendjmsmessagetonotificationqueue μετά την δήλωση em.merge() και τροποποιούμε την μέθοδο createjmsmessageforjmsnotificationqueue ώστε να στέλνει ObjectMessage. 33
Δημιουργία Enterprise Java Beans - Session και Message Driven (14/23) 34
Δημιουργία Enterprise Java Beans - Session και Message Driven (15/23) 35
Δημιουργία Enterprise Java Beans - Session και Message Driven (16/23) 36
Δημιουργία Enterprise Java Beans - Session και Message Driven (17/23) 37
Δημιουργία Enterprise Java Beans - Session και Message Driven (18/23) 15. Στο Message-Driven Bean, NotificationBean, διορθώνουμε την μέθοδο onmessage ώστε να τυπώνουμε τις λεπτομέρειες του ενημερωμένου αντικειμένου Customer και να δείχνουμε ότι έλαβε το μήνυμα. 38
Δημιουργία Enterprise Java Beans - Session και Message Driven (19/23) 39
Δημιουργία Enterprise Java Beans - Session και Message Driven (20/23) Μέχρι εδώ έχουμε ολοκληρώσει τις εργασίες που απαιτούνται στο EJB και θα πάμε στο επόμενο επίπεδο τις σελίδες JSF. 40
Δημιουργία Enterprise Java Beans - Session και Message Driven (21/23) Πριν δημιουργήσουμε τις σελίδες wed θα πρέπει να επιβεβαιώσουμε ότι το framework JavaServer Faces υπάρχει στο Web project, CustomerApp-war. 1. Στο παράθυρο Projects view, κάνουμε δεξί κλικ στο Web project, CustomerApp-war, και επιλέγουμε Properties (last item) 2. Από το πλαίσιο Categories, επιλέγουμε Frameworks, και επιβεβαιώνουμε ότι το JavaServer Faces έχει προστεθεί στο πλαίσιο Used Frameworks. 41
Δημιουργία Enterprise Java Beans - Session και Message Driven (22/23) Σχήμα 11. Παράθυρο project properties επιλογή frameworks. 42
Δημιουργία Enterprise Java Beans - Session και Message Driven (23/23) Στις παρακάτω διαφάνειες θα δημιουργήσουμε τις σελίδες JSF, οι οποίες θα εμφανίζουν τις οθόνες για να υλοποιούνται οι συναρτήσεις Read/Update. Θα δημιουργήσουμε δύο σελίδες Web: CustomerList όπου θα παρουσιάζονται όλοι οι πελάτες με μορφή πίνακα, και CustomerDetails όπου μπορούμε να βλέπουμε και να διορθώνουμε τα στοιχεία κάποιου πελάτη. 43
Δημιουργώντας το Customer Managed Bean (1/8) Πριν δημιουργήσουμε μια σελίδα JSF, θα πρέπει πρώτα να δημιουργήσουμε ένα managed bean μέσω του οποίου θα παρέχουμε τις απαραίτητες υπηρεσίες για τις σελίδες JSF. 1. Στο παράθυρο Projects, δεξί κλικ στο Web project, CustomerApp-war, και επιλέγουμε New > JSF Managed Bean..., δώστε σαν όνομα κλάσης το CustomerMBean, "com.customerapp.web" σαν όνομα πακέτου, customer σαν όνομα, και scope επιλέξτε session. 44
Δημιουργώντας το Customer Managed Bean (2/8) Σχήμα 12. Δημιουργία managed bean. 45
Δημιουργώντας το Customer Managed Bean (3/8) 2. Στον code editor επιλέγουμε την νέα κλάση CustomerMBean, δεξί κλικ και επιλέγουμε Insert Code...", και Call Enterprise Bean... από την λίστα. 3. Στον διάλογο "Call Enterprise Bean", ανοίγουμε το CustomerApp-ejb project επιλέγουμε CustomerSessionBean και επιλέγουμε No Interface (και η Local και η Remote δεν θα πρέπει να είναι επιλεγμένες γιατί δημιουργούμε ένα Session Bean χωρίς interface) για το Referenced Interface, και τέλος πατάμε το κουμπί OK. 46
Δημιουργώντας το Customer Managed Bean (4/8) 4. Προσέξτε ότι δημιουργείται αυτόματα η μεταβλητή, customersessionbean η οποία αντιπροσωπεύει ένα στιγμιότυπο του session bean, στην αρχή του τμήματος δηλώσεων της κλάσης. 47
Δημιουργώντας το Customer Managed Bean (5/8) Προσθέστε το υπόλοιπο των μεθόδων (properties και action handlers) και τις υλοποιήσεις στην κλάση όπως δείχνεται παρακάτω, οι οποίες θα χρησιμοποιηθούν από τις σελίδες JSF αργότερα. 48
Δημιουργώντας το Customer Managed Bean (6/8) 49
Δημιουργώντας το Customer Managed Bean (7/8) 50
Δημιουργώντας το Customer Managed Bean (8/8) 51
Δημιουργία της σελίδας Web για την προβολή των πελατών (1/17) 1. Στο παράθυρο προβολής των Projects, κάνουμε δεξί κλικ στο Web project, CustomerApp-war κι επιλέγουμε New > JSF Page..., δίνοντας για ονομασία αρχείου το CustomerList και σαν τύπο JSP File στα Options. 52
Δημιουργία της σελίδας Web για την προβολή των πελατών (2/17) Σχήμα 13. Δημιουργία σελίδας web για την προβολή πελατών (1). 53
Δημιουργία της σελίδας Web για την προβολή των πελατών (3/17) 2. Ανοίγουμε το αρχείο CustomerList.jsp σε προβολή κώδικα, και από την παλέτα εισάγουμε (drag and drop) ένα "JSF Data Table from Entity" ανάμεσα από τις ετικέτες <body></body>. 54
Δημιουργία της σελίδας Web για την προβολή των πελατών (4/17) Σχήμα 14. Δημιουργία σελίδας web για την προβολή πελατών (2). 55
Δημιουργία της σελίδας Web για την προβολή των πελατών (5/17) 3. Στο παράθυρο διαλόγου με τίτλο "JSF Table from Entity" που εμφανίζεται επιλέγουμε "com.customerapp.entity.customer" σαν Entity Bean, και "customer.customers" σαν Managed Bean και κάνουμε κλικ στο κουμπί ΟΚ. Σχήμα 15. Δημιουργία σελίδας web για την προβολή πελατών (3). 56
Δημιουργία της σελίδας Web για την προβολή των πελατών (6/17) Το αποτέλεσμα αυτού είναι η αυτόματη δημιουργία κώδικα ο οποίος θα εμφανίσει την λίστα των αντικειμένων Customer. 57
Δημιουργία της σελίδας Web για την προβολή των πελατών (7/17) 4. Σε αυτό το σημείο μπορούμε να δούμε τα αποτελέσματα της πρώτης σελίδας που δημιουργήσαμε. Στο παράθυρο προβολής των Projects κάνουμε δεξί κλικ πάνω στο project CustomerApp επιλέγουμε Clean and Build και μετά Deploy. Για να επιβεβαιώσουμε ότι η εγκατάσταση ήταν επιτυχής πάμε στον φάκελο Applications στον Glassfish server κάτω από τα Services και ελέγχουμε εάν η εφαρμογή, CustomerApp υπάρχει. 58
Δημιουργία της σελίδας Web για την προβολή των πελατών (8/17) Σχήμα 16. Δημιουργία σελίδας web για την προβολή πελατών (4). 59
Δημιουργία της σελίδας Web για την προβολή των πελατών (9/17) 5. Στον browser πληκτρολογούμε την διεύθυνση http://localhost:8080/customerappwar/faces/customerlist.jsp και θα πρέπει να δούμε την επόμενη εικόνα. 60
Δημιουργία της σελίδας Web για την προβολή των πελατών (10/17) Σχήμα 17. Δημιουργία σελίδας web για την προβολή πελατών (5). 61
Δημιουργία της σελίδας Web για την προβολή των πελατών (11/17) Θα πρέπει τώρα να μορφοποιήσουμε την σελίδα κατάλληλα ώστε να γίνει αισθητικά ποιο καλή. 6. Εισάγουμε τον ακόλουθο κώδικα στο αρχείο μορφοποίησης css/default.css. 62
Δημιουργία της σελίδας Web για την προβολή των πελατών (12/17) Εισάγουμε την μορφοποίηση στο αρχείο JSP ανάμεσα από τις ετικέτες <head> και </head> χρησιμοποιώντας την ετικέτα <link> ώστε ο κώδικας να είναι όπως παρακάτω. 63
Δημιουργία της σελίδας Web για την προβολή των πελατών (13/17) 64
Δημιουργία της σελίδας Web για την προβολή των πελατών (14/17) 65
Δημιουργία της σελίδας Web για την προβολή των πελατών (15/17) 66
Δημιουργία της σελίδας Web για την προβολή των πελατών (16/17) 67
Δημιουργία της σελίδας Web για την προβολή των πελατών (17/17) Το αποτέλεσμα το οποίο είναι πλέον αισθητικά πολύ καλύτερο φαίνεται στην επόμενη εικόνα. Σχήμα 18. Δημιουργία σελίδας web για την προβολή πελατών (6). 68
Σελίδα Web για προβολή στοιχείων πελατών (1/19) Θα δημιουργήσουμε τώρα την σελίδα στην οποία θα μπορούμε να δούμε και να διορθώσουμε τα στοιχεία κάποιου πελάτη. 1. Στο παράθυρο προβολής των Projects κάνουμε δεξί κλικ στο Web project, CustomerApp-war, και επιλέγουμε New > JSF Page..., δίνοντας για όνομα αρχείου το CustomerDetails και σαν τύπο JSP File στα Options. 2. Ανοίγουμε το αρχείο σε προβολή κώδικα και με drag and drop εισάγουμε ένα στοιχείο "JSF Form from Entity" από την παλέτα ανάμεσα από τις ετικέτες <body></body>. 69
Σελίδα Web για προβολή στοιχείων πελατών (2/19) Σχήμα 19. Δημιουργία σελίδας web για την προβολή στοιχείων των πελατών (1). 70
Σελίδα Web για προβολή στοιχείων πελατών (3/19) 3. Στο παράθυρο διαλόγου που θα εμφανιστεί JSF Form from Entity. Επιλέγουμε "com.customerapp.entity.customer" ως Entity Bean. Επιλέγουμε "customer.details" ως Managed Bean property. Κάνουμε κλικ στο OK. Σχήμα 20. Δημιουργία σελίδας web για την προβολή στοιχείων των πελατών (2). 71
Σελίδα Web για προβολή στοιχείων πελατών (4/19) Το αποτέλεσμα της προηγούμενης ενέργειας θα είναι η αυτόματη δημιουργία κώδικα για την προβολή όλων των τιμών των ιδιοτήτων του αντικειμένου Customer σε 2 columns grid. 4. Για να ενεργοποιηθεί η δυνατότητα πλοήγησης από την σελίδα προβολής όλων των πελατών στην σελίδα προβολής και διόρθωσης των στοιχείων των πελατών θα πρέπει να διορθώσουμε το αρχείο faces-config.xml με το διορθωτή PageFlow και να συνδέσουμε τις 2 σελίδες όπως φαίνεται στο παρακάτω διάγραμμα. 72
Σελίδα Web για προβολή στοιχείων πελατών (5/19) Σημείωση: Τα <from-outcome> strings LIST και DETAILS πρέπει να ταιριάζουν με το επιστρεφόμενο String των μεθόδων list και showdetails στο CustomerMBean. Σχήμα 21. Δημιουργία σελίδας web για την προβολή στοιχείων των πελατών (3). 73
Σελίδα Web για προβολή στοιχείων πελατών (6/19) 5. Για να δούμε το αποτέλεσμα των παραπάνω ενεργειών αποθηκεύουμε και εγκαθιστούμε την εφαρμογή στον server. Στη συνέχεια ανοίγουμε την διεύθυνση http://localhost:8080/customerappwar/faces/customerlist.jsp. Κάνουμε κλικ στην πρώτη γραμμή του πίνακα με τους πελάτες. 74
Σελίδα Web για προβολή στοιχείων πελατών (7/19) Σχήμα 22. Δημιουργία σελίδας web για την προβολή στοιχείων των πελατών (4). 75
Σελίδα Web για προβολή στοιχείων πελατών (8/19) Θα πρέπει να διορθώσουμε αισθητικά την σελίδα, και να εισάγουμε την λειτουργία Update. 6. O Discount Codes είναι μια σταθερή λίστα στην βάση δεδομένων έτσι μπορούμε να την παρουσιάσουμε σε ένα Drop Down List. Έτσι θα αντιστοιχίσουμε την <f:selectitem> την Discount Codes dropdown list σε μια νέα ιδιότητα, customer.discountcodes στην CustomerMBean η οποία θα επιστρέφει έναν πίνακα SelectItem (Object value, String label). 76
Σελίδα Web για προβολή στοιχείων πελατών (9/19) 77
Σελίδα Web για προβολή στοιχείων πελατών (10/19) Σημειώστε ότι η τιμή από κάθε SelectItem του Discount Code είναι τύπου Character, καθώς η τιμή που θα αντιστοιχεί στο Discount Code <h:selectonemenu> πρέπει να είναι τύπου Character. Έτσι θα χρειαστεί να δημιουργήσουμε getter and setter για την νέα ιδιότητα, discount στην Customer Entity class, η οποία χρησιμοποιεί τύπο Character ως παράμετρο. 78
Σελίδα Web για προβολή στοιχείων πελατών (11/19) 79
Σελίδα Web για προβολή στοιχείων πελατών (12/19) 7. Αντιστοιχούμε την νέα ιδιότητα, "customer.details.discount" στην τιμή από το <h:selectonemenu> του πεδίου Discount Code στο αρχείο CustomerDetails.jsp. 80
Σελίδα Web για προβολή στοιχείων πελατών (13/19) Κάνουμε και τις υπόλοιπες αλλαγές στην σελίδα JSP με την βοήθεια του code completion χαρακτηριστικού του Netbeans. Εισάγουμε την ετικέτα <link> στο <head> ώστε να εισάγουμε το αρχείο μορφοποίησης, css/default.css. Εισάγουμε τα Command buttons, <h:commandbutton> για την ενημέρωση και την επιστροφή ( Update, Back ). Αναδιατάσσουμε τις γραμμές και χρησιμοποιούμε ένα διαφορετικό background color για το panelgrid. 81
Σελίδα Web για προβολή στοιχείων πελατών (14/19) 82
Σελίδα Web για προβολή στοιχείων πελατών (15/19) 83
Σελίδα Web για προβολή στοιχείων πελατών (16/19) 84
Σελίδα Web για προβολή στοιχείων πελατών (17/19) 85
Σελίδα Web για προβολή στοιχείων πελατών (18/19) Τα αποτελέσματα των αλλαγών. Σχήμα 23. Customer Details. 86
Σελίδα Web για προβολή στοιχείων πελατών (19/19) Όταν κάνουμε κλικ στο κουμπί Update θα πρέπει να βλέπουμε κάτι παρόμοιο με τα παρακάτω μέσα στο αρχείο server.log. 87
Βιβλιογραφία 1. Java προγραμματισμός, Όγδοη έκδοση, Deitel Paul J., Deitel Harvey M., Εκδόσεις Γκιούρδας Μ.. 2. «Προγραμματισμός Internet και World Wide Web», Deitel Paul J., Deitel Harvey M., Εκδόσεις Γκιούρδας Μ.. 3. «Πλήρες εγχειρίδιο της Java 6», Lemay C, Εκδόσεις Γκιούρδας Μ., Αθήνα 2007. 88
Τέλος Ενότητας