Προγραμματισμός

Τι είναι το JSF; Παρουσιάζουμε τα JavaServer Faces

Το JavaServer Faces (JSF) είναι η τυπική τεχνολογία Java για τη δημιουργία διεπαφών ιστού που βασίζονται σε στοιχεία, προσανατολισμένα σε συμβάντα. Όπως το JavaServer Pages (JSP), το JSF επιτρέπει την πρόσβαση σε δεδομένα και λογική από τον διακομιστή. Σε αντίθεση με το JSP, το οποίο είναι ουσιαστικά μια σελίδα HTML με δυνατότητες από διακομιστή, το JSF είναι ένα έγγραφο XML που αντιπροσωπεύει επίσημα στοιχεία σε ένα λογικό δέντρο. Τα στοιχεία του JSF υποστηρίζονται από αντικείμενα Java, τα οποία είναι ανεξάρτητα από το HTML και έχουν το πλήρες φάσμα ικανοτήτων Java, συμπεριλαμβανομένης της πρόσβασης σε απομακρυσμένα API και βάσεις δεδομένων.

Η βασική ιδέα για ένα πλαίσιο όπως το JSF είναι να ενθυλακωθεί (ή κάλυμμα) τεχνολογίες από την πλευρά του πελάτη όπως HTML, CSS και JavaScript, επιτρέποντας στους προγραμματιστές να δημιουργούν διεπαφές ιστού χωρίς πολλή αλληλεπίδραση με αυτές τις τεχνολογίες.

Αυτό το άρθρο παρουσιάζει ένα στιγμιότυπο της προσέγγισης του JSF στην ανάπτυξη διεπαφής χρήστη βάσει στοιχείων για εφαρμογές Ιστού Java. Απλά παραδείγματα παρουσιάζουν την αρχιτεκτονική MVC του JSF, το μοντέλο εκδηλώσεων και τη βιβλιοθήκη στοιχείων. Στα παραδείγματα περιλαμβάνονται νέες δυνατότητες στο JSF 2.3 και θα χρησιμοποιήσουμε το PrimeFaces για τη βιβλιοθήκη των συστατικών μας.

Εξελιγμένο JSF

Πολύ δημοφιλές, το JSF αντιμετώπισε πρόσφατα ανταγωνισμό από συμβατά με Java πλαίσια ιστού, συμπεριλαμβανομένων των πλαισίων JavaScript από την πλευρά του πελάτη. Ακόμα, το JavaServer Faces παραμένει το πρότυπο Java, ειδικά για την ανάπτυξη επιχειρήσεων Java μεγάλης κλίμακας. Η προδιαγραφή JSF δημιούργησε επίσης πληθώρα πλαισίων και βιβλιοθηκών, οι οποίες έχουν συμβαδίσει με τις πρόσφατες βελτιώσεις από την πλευρά του πελάτη. Ένα από αυτά είναι το PrimeFaces, το οποίο διερευνούμε σε αυτό το σεμινάριο.

Ενώ το πρόγραμμα για μελλοντική ανάπτυξη είναι ασαφές, το JSF 2.3 δίνει στους προγραμματιστές πολλά να εργαστούν με όσο περιμένουμε. Κυκλοφόρησε τον Μάρτιο του 2017, το JSF 2.3 σχεδιάστηκε σκόπιμα για τον εκσυγχρονισμό του JSF. Μεταξύ εκατοντάδων μικρών επισκευών και μεγαλύτερων ενημερώσεων, το JSF 2.3 καταργεί τους διαχειριζόμενους σχολιασμούς φασολιών υπέρ του CDI, τους οποίους θα παρουσιάσω αργότερα σε αυτό το σεμινάριο.

JSF 2.3 στην Τζακάρτα ΕΕ

Τον Σεπτέμβριο του 2017, η Oracle ανακοίνωσε την πρόθεσή της να μεταφέρει το Java EE στο Eclipse Foundation. Το Java EE έχει μετονομαστεί εκ νέου σε Jakarta EE και το JSF 2.3 (Eclipse Mojarra) έχει υιοθετηθεί για συνέχεια. Η επόμενη σημαντική έκδοση της προδιαγραφής JSF θα είναι το Eclipse Mojarra 3.0.

Δημιουργία διεπαφών ιστού βασισμένων σε στοιχεία στο JSF

Η βασική ιδέα του JSF είναι να ενσωματώσει τη λειτουργικότητα σε επαναχρησιμοποιήσιμα στοιχεία. Αυτό είναι παρόμοιο με τις επαναχρησιμοποιήσιμες ετικέτες που χρησιμοποιούνται στο JSP, αλλά τα στοιχεία JSF είναι πιο επίσημα.

Ενώ μπορείτε να χρησιμοποιήσετε σελίδες JSF στις σελίδες JavaServer, είναι πιο συνηθισμένο να χρησιμοποιείτε Facelets για τη δημιουργία αυτόνομων σελίδων JSF. Φορέματα είναι σελίδες XHTML σχεδιασμένες για τον καθορισμό διεπαφών JSF. Με τα Facelets, χρησιμοποιείτε ετικέτες XML για να δημιουργήσετε ένα δέντρο στοιχείων που γίνεται το ικρίωμα για ένα περιβάλλον εργασίας χρήστη JSF.

Η λίστα 1 παρουσιάζει τα κύρια μέρη μιας απλής σελίδας JSF γραμμένη χρησιμοποιώντας Facelets. Σε αυτό το παράδειγμα έχουμε πρόσβαση στις δυνατότητες του διακομιστή Java μέσω ενός φασολιού που έχει τεθεί στο πεδίο εφαρμογής μέσω CDI. Θα δείτε περισσότερα για το CDI αργότερα.

Λίστα 1. Δείγμα σελίδας JSF

    Γεια σας JavaWorld! # {javaBean.content} 

Στην καταχώριση 1 βλέπουμε μια τυπική σελίδα XHTML. Μια προβολή Facelets είναι χτισμένη πάνω από το XHTML. Εκτός από τον χώρο ονομάτων XHTML, ο δευτερεύων χώρος ονομάτων ορίζεται και αναφέρεται.

ο η Η βιβλιοθήκη περιέχει τυπικά στοιχεία για χρήση σε σελίδες HTML JSF. ο //xmlns.jcp.org/jsf/html Η βιβλιοθήκη ορίζει μια συλλογή στοιχείων JSF, στην περίπτωση αυτή μια συλλογή κοινών στοιχείων HTML. Ένα από αυτά τα συστατικά είναι το στοιχείο.

Στοιχεία HTML στο JSF

Όσον αφορά τη σύνταξη, την καταχώριση 1's το στοιχείο αναφέρεται στο jsf / html βιβλιοθήκη με το η πρόθεμα. Στη συνέχεια παραπέμπει στο συγκεκριμένο συστατικό της βιβλιοθήκης, που είναι το κεφάλι συστατικό.

ο το στοιχείο εξάγει το στοιχείο κεφαλής HTML. (Όλη αυτή η σύνταξη μπορεί να φαίνεται υπερβολική για έναν τόσο απλό σκοπό, αλλά υπάρχει καλός λόγος για αυτό, όπως θα δείτε σύντομα.)

Συστατικά ένθεσης

Στο εσωτερικό της κεφαλής βρίσκεται ένα τυπικό HTML στοιχείο. Αυτό το στοιχείο παρέχεται στο συστατικό, μαζί με τα θυγατρικά στοιχεία περιεχομένου που βρίσκονται μέσα σε αυτό.

Στο σώμα του εγγράφου, μια έκφραση JSF περιέχεται από το #{} σύνταξη. Αυτό είναι ακριβώς ανάλογο με μια έκφραση JSP με το ${} μορφή: επιτρέπει την πρόσβαση αντικειμένων Java σε εύρος και απλών λειτουργιών.

Το βασικό μοτίβο για το JSF είναι απλό: Χρησιμοποιήστε Facelets για να δημιουργήσετε ένα δέντρο XML που αναφέρεται σε μια βιβλιοθήκη στοιχείων ή βιβλιοθήκες και, στη συνέχεια, χρησιμοποιήστε στοιχεία στη βιβλιοθήκη για να κάνετε αντικείμενα Java ως HTML.

Χρήση αντικειμένων Java στο JSF

Επιστρέφοντας στην Καταχώριση 1, παρατηρήστε ότι μέσα στην έκφραση JSF ($ {javaBean.content) Ο javaBean αντικείμενο βρίσκεται σε πεδίο εφαρμογής όταν εκτελείται αυτή η σήμανση. Το XHTML των Facelets έχει πρόσβαση στο .περιεχόμενο ιδιοκτησία στο javaBean αντικείμενο. Η τελική έξοδος είναι μια διεπαφή ιστού που συγχωνεύει τη δομή προβολής Facelets με τις δυνατότητες δεδομένων και λογικής από την πλευρά του διακομιστή της Java.

Η χρήση μιας έκφρασης JSF είναι ένας μόνο τρόπος πρόσβασης στα δεδομένα εφαρμογών Java από ένα περιβάλλον εργασίας χρήστη JSF. Τελικά, θα θελήσετε να εξερευνήσετε άλλους τρόπους με τους οποίους ένα στοιχείο JSF μπορεί να αλληλεπιδράσει με το Java backend - πράγματα όπως λίστες δεδομένων και πλέγματα και μια ποικιλία στοιχείων ελέγχου εισόδου. Προς το παρόν, αρκεί να απορροφήσει τον τρόπο με τον οποίο το JSF χρησιμοποιεί ετικέτες XML (ή σχολιασμούς) για να δημιουργήσει ένα δέντρο συστατικών που εξάγει HTML βάσει των δεδομένων που περιέχονται σε αντικείμενα Java.

Σχολιασμοί έναντι XML

Με το JSF 2.3 έχει καταστεί δυνατός ο ορισμός στοιχείων JSF με σχολιασμούς, αποφεύγοντας εντελώς τα μεταδεδομένα XML. Είναι απολύτως δυνατό να προσδιορίσετε και να αναπτύξετε μια εφαρμογή JSF χωρίς να επεξεργαστείτε κανένα XML.

Δομή μιας εφαρμογής JSF

Όπως οι JavaServer Pages και το Servlet API, το JavaServer Faces απαιτεί μια τυπική δομή καταλόγου και μεταδεδομένα. Αυτά αναπτύσσονται ως .πόλεμος αρχεία.

Η δομή ενός αρχείου .war είναι παρόμοια με μια εφαρμογή Servlet ή JSP. Περιέχει ένα / web-app κατάλογο, ο οποίος περιέχει τα αρχεία σήμανσης της εφαρμογής (σε αυτήν την περίπτωση HTML, JSP και Facelets), καθώς και / WEB-INF κατάλογος, ο οποίος παρουσιάζει τα μεταδεδομένα για να περιγράψει την εφαρμογή.

Εξυπηρέτηση JSF

Ενώ μπορείτε να εκτελέσετε το JSF σε ένα κοντέινερ Java EE όπως το Glassfish, ένα απλό servlet container είναι το μόνο που χρειάζεστε. Το Tomcat είναι ένα δημοφιλές κοντέινερ για JSF και άλλες τεχνολογίες Java από διακομιστή.

JSF 2.3: Προδιαγραφές και υλοποιήσεις

Ένα από τα πλεονεκτήματα της Java είναι ότι βασίζεται σε πρότυπα και αυτά τα πρότυπα διέπονται από μια κοινοτική διαδικασία ανοιχτού κώδικα. Από την ίδρυσή της, η Java Community Process (JCP) επιβλέπει την ανάπτυξη της τεχνολογίας Java. Μόλις αναπτυχθεί και εγκριθεί μια βελτίωση προδιαγραφών ή προδιαγραφών από το JCP, είναι διαθέσιμο να εφαρμοστεί από πολλά μέρη. Μέχρι πρόσφατα, Servlets, JSP και JSF αναπτύχθηκαν όλα χρησιμοποιώντας τη διαδικασία καθορισμού ανοιχτού κώδικα JCP.

Η πιο πρόσφατη προδιαγραφή JSF από αυτήν τη συγγραφή είναι JSF 2.3, που κυκλοφόρησε ως μέρος του Java EE 8 το 2017. Το Oracle's (τώρα Eclipse's) Mojarra είναι η εφαρμογή αναφοράς JSF και τα MyFaces και PrimeFaces είναι δημοφιλείς εφαρμογές τρίτων.

Κάθε ένα από αυτά τα πλαίσια υλοποιεί τον πυρήνα JSF, ο οποίος περιλαμβάνει ορισμένα τυπικά στοιχεία. Οι προμηθευτές μπορούν επίσης να προσφέρουν επιπλέον βιβλιοθήκες συστατικών πάνω από το πρότυπο. Κατά την αξιολόγηση των πλαισίων JSF, είναι καλή ιδέα να λάβετε υπόψη τις ανάγκες της εφαρμογής σας και ποιες βιβλιοθήκες συστατικών είναι διαθέσιμες για να σας βοηθήσουν να το δημιουργήσετε. Στην ιδανική περίπτωση, το πλαίσιο JSF σας θα σας φέρει όσο το δυνατόν πιο κοντά σε αυτό που χρειάζεστε, αμέσως.

MVC σε JSF 2.3

Το JSF είναι ένα Πλαίσιο MVC, εφαρμόζοντας το μοντέλο-view-controller. Στο μοτίβο MVC, η ιδέα είναι να διαχωριστούν οι τρεις ανησυχίες ενός UI σε διακριτικά μέρη, έτσι ώστε να είναι ευκολότερη η διαχείριση τους. Σε γενικές γραμμές, το θέα είναι υπεύθυνη για την εμφάνιση δεδομένων στο μοντέλο, και το ελεγκτής είναι υπεύθυνη για τη ρύθμιση του μοντέλου και τη δρομολόγηση του χρήστη στη σωστή προβολή.

Σε μια εφαρμογή JSF, η προβολή είναι η σελίδα Facelets με το σύνολο των ετικετών XML. Αυτά καθορίζουν τη διάταξη του περιβάλλοντος εργασίας χρήστη. Το άλλο μισό της χρήσης του JSF είναι η πλευρά του διακομιστή, όπου η Java κατηγορεί αυτά τα στοιχεία διεπαφής χρήστη.

Φασόλια που έχουν υποστεί κατεργασία στο JSF 2.3

Οι διαχειριζόμενοι σχολιασμοί φασολιών έχουν καταργηθεί στο JSF 2.3 και αντικαταστάθηκαν από το CDI (Contexts and Dependency Injection). Με το CDI, οι προγραμματιστές ορίζουν ένα πλαίσιο και εισάγουν αντικείμενα σε αυτό το περιβάλλον. Όσοι είναι εξοικειωμένοι με τα διαχειριζόμενα φασόλια θα βρουν τη σύνταξη σχολιασμού λίγο διαφορετική, αλλά η σημασιολογία παραμένει ακριβώς η ίδια.

Φασόλια ελεγκτή

Στο JSF 2.3, τα φασόλια ελεγκτή παρέχουν το ελεγκτής μέρος της εξίσωσης MVC. Τα κανονικά αντικείμενα Java (συχνά ονομάζονται POJOs ή απλά παλιά αντικείμενα Java) παρέχουν το μοντέλο.

Όσον αφορά τη ροή της διαδικασίας, τα φασόλια ελεγκτή:

  1. Αποφασίστε πού θα κατευθύνετε τα αιτήματα των χρηστών
  2. Ρυθμίστε POJO για το μοντέλο
  3. Χρησιμοποιήστε το μοντέλο για να κάνετε την προβολή Facelets

Στη συνέχεια, το JSF διπλώνει το δέντρο συστατικών και το μοντέλο για να αποδώσει το HTML εξόδου.

Η λίστα 2 δείχνει πώς θα ορίζατε το javaBean αντικείμενο από την καταχώριση 1 χρησιμοποιώντας CDI. Αυτή η λίστα προϋποθέτει ότι η εφαρμογή έχει το cdi-api-1.2.jar στις εξαρτήσεις της.

Λίστα 2. Ένα JavaBean που ορίζεται χρησιμοποιώντας CDI

 εισαγωγή javax.inject.Named; εισαγωγή javax.enterprise.context.SessionScoped; @Named @ViewScoped δημόσια τάξη Το JavaBean εφαρμόζει το Serializable {private String content = ì Καλώς ήλθατε στο JSF! Î // getters / setters} 

JSF 2.3 με PrimeFaces

Στις επόμενες ενότητες θα χρησιμοποιήσω το PrimeFaces για να σας δείξω πώς το JSF εφαρμόζει το μοτίβο MVC, τα μηνύματα που βασίζονται σε συμβάντα και τα επαναχρησιμοποιήσιμα στοιχεία. Για να ξεκινήσετε, ανοίξτε το PrimeFaces Showcase, κάντε κλικ στο Δεδομένα σύνδεσμος στην αριστερή στήλη και επιλέξτε Λίστα δεδομένων. Αυτό θα ανεβάσει τον κωδικό επίδειξης DataList για PrimeFaces.

Το σχήμα 1 σας δείχνει πού να βρείτε αυτά τα δείγματα.

Μάθιου Τάισον

Το σχήμα 2 δείχνει την έξοδο ενός απλού πίνακα δεδομένων, ο οποίος λαμβάνεται από την επίδειξη PrimeFaces DataList.

Μάθιου Τάισον

PrimeFaces DataList: Πρόσβαση στο μοντέλο δεδομένων

Η λίστα 3 παρουσιάζει τη σήμανση για αυτό λίστα δεδομένων απεικόνιση. Εάν μετακινηθείτε στο κάτω μέρος της προθήκης PrimeFaces, μπορείτε να δείτε τη σήμανση στο dataList.xhtml αυτί.

Λίστα 3. Facelet για PrimeFaces DataList

   Βασικό # {car.brand}, # {car.year} 

Στην καταχώριση 3, παρατηρήστε το αξία ιδιοκτησία του λίστα δεδομένων συστατικό. Μπορείτε να δείτε ότι αυτό αναφέρεται σε α dataListView αντικείμενο και έχει πρόσβαση στο . αυτοκίνητα1 ιδιοκτησία σε αυτό. Το στοιχείο πρόκειται να χρησιμοποιήσει το μοντέλο μοντέλο που επιστρέφεται από αυτό το πεδίο. Τα διακριτικά JSF χρησιμοποιούν συμβατικούς αξεσουάρ για να αναφέρουν ιδιότητες αντικειμένου, έτσι . αυτοκίνητα1 θα αναφέρεται στο getCars () να πάρει το αντικείμενο.

Στη συνέχεια, παρατηρήστε το var = "αυτοκίνητο" ιδιοκτησία. Αυτό λέει στο λίστα δεδομένων συστατικό ποια μεταβλητή θα χρησιμοποιήσει όταν επαναλαμβάνει τη λίστα των αυτοκινήτων που επέστρεψε από το αξία πεδίο. Αυτές οι ιδιότητες είναι συγκεκριμένες για το λίστα δεδομένων συστατικό, αλλά το αξία η ιδιοκτησία είναι πολύ κοινή. ο var Το χαρακτηριστικό είναι επίσης συμβατικό για στοιχεία που επαναλαμβάνονται σε λίστες.

Στο σώμα του στοιχείου στην καταχώριση 3, μπορείτε να δείτε το αυτοκίνητο Η μεταβλητή έχει πρόσβαση μέσω εκφράσεων JSF όπως #{μάρκα αυτοκινήτου}. Κάθε επανάληψη του dataListView.cars1 Το παράδειγμα θα εμφανίσει το μάρκα αυτοκινήτου πεδίο.

Παρατηρήστε ότι το Η ετικέτα δείχνει τη δυνατότητα προσαρμογής στοιχείων για τον τρόπο εμφάνισης. Σε αυτήν την περίπτωση, η κεφαλίδα ορίζεται ως Βασικός.

Μπορείτε να δείτε πώς το Facelets XML θα οδηγήσει αυτήν την έξοδο συνδυάζοντας τα δεδομένα με τη σήμανση. Τώρα ας δούμε τον κώδικα Java πίσω από αυτόν.

Στοιχεία διακομιστή της DataList

Η λίστα 4 δείχνει DataListView, η κλάση Java που χρησιμοποιείται από τη σήμανση στην καταχώριση 3. Θα δείτε σύντομα πώς dataListView Το παράδειγμα σχετίζεται με το DataListView τάξη.

Λίστα 4. Κατηγορία DataListView

 πακέτο org.primefaces.showcase.view.data; εισαγωγή java.io.Serializable; εισαγωγή java.util.List; εισαγωγή javax.annotation.PostConstruct; εισαγωγή javax.inject.Named; // Pre JSF 2.3, αυτό ήταν: // import javax.faces.bean.ManagedBean; εισαγωγή javax.inject.Inject; εισαγωγή javax.faces.bean.ViewScoped; εισαγωγή org.primefaces.showcase.domain.Car; εισαγωγή org.primefaces.showcase.service.CarService; @Named @ViewScoped δημόσια κατηγορία DataListView υλοποιεί Serializable {private List cars1; επιλεγμένο ιδιωτικό αυτοκίνητο @Inject ("# {carService}") ιδιωτική υπηρεσία CarService; @PostConstruct public void init () {cars1 = service.createCars (10); } δημόσια λίστα getCars1 () {return cars1; } public void setService (υπηρεσία CarService) {this.service = service; }} 

Η λίστα 4 έχει μερικά άλλα σημαντικά στοιχεία, τα οποία θα εξετάσουμε κομμάτι προς κομμάτι.

Ένεση εξάρτησης και σχολιασμοί

Πρώτον, παρατηρήστε ότι το DataListView τάξη σχολιάζεται με @ Όνομα, το οποίο μπορείτε να δείτε από την εισαγωγή εισαγωγή javax.inject.Named; είναι μέρος της JSF. ο @ Όνομα Ο σχολιασμός λέει στον JSF ότι αυτό το φασόλι είναι μέρος της εφαρμογής. ο @ViewScoped Ο σχολιασμός ενημερώνει τον JSF ότι το φασόλι θα ζήσει μόνο για τη ζωή της θέασης.

Στη συνέχεια, παρατηρήστε ότι το Υπηρεσία αυτοκινήτου το ακίνητο έχει το @Κάνω ένεση σχολιασμός (ονομάζεται @ManagedProperty πριν από το JSF 2.3). Αυτό είναι ένα άλλο χαρακτηριστικό JSF που επιτρέπει στα φασόλια να "ενσύρματο μαζί", μια τεχνική που διαδίδεται από το πλαίσιο Spring και άλλα εργαλεία έγχυσης εξάρτησης. Στην ουσία, η JSF θα βρει το υπηρεσία αυτοκινήτου αντικείμενο στο πεδίο εφαρμογής και συσχετίστε το αυτόματα με το υπηρεσία πεδίο στο DataListView αντικείμενο.