Was sind die Prinzipien bei der Entwicklung von Webanwendungen mit actionbasierten Java-Frameworks?

StackOverflow https://stackoverflow.com/questions/2852481

  •  27-09-2019
  •  | 
  •  

Frage

Hintergrund

Ich werde mit Java eine neue Webanwendung entwickeln. Es ist nicht sehr groß oder sehr komplex und ich habe genug Zeit, bis es "offiziell" anfangen wird.

Ich habe einen JSF/Facelets -Entwicklungshintergrund (etwa ein halbes Jahr). Und ich habe auch ein gewisses Versiegelung mit JSP+JSTL.

Bei selbstedukierendem Zweck (und auch um die beste Lösung zu finden) möchte ich das neue Projekt mit einem von actionbasierten Frameworks prototypisieren. Eigentlich werde ich zwischen Frühlings -MVC und Streifen wählen.

Problem

Um einen korrekten Eindruck über actionbasierte Frameworks (im Vergleich zu JSF) zu erhalten, möchte ich sicherstellen, dass ich sie richtig verwende (in größerem oder geringerem Ausmaß).

Also, hier liste ich einige frequenteste Aufgaben auf (zumindest für mich) und beschreibe, wie ich sie mit JSF löste. Ich möchte wissen, wie sie mit einem actionbasierten Framework gelöst werden sollten (oder getrennt mit Feder-MVC und Streifen, wenn es einen Unterschied für die konkrete Aufgabe gibt).

  1. Inhalte rendern: Ich kann einsatzbereites Komponenten aus Standard-JSF-Bibliotheken (Core und HTML) oder von Libs der 3. Partei (wie Richfaces) anwenden. Ich kann einfache Komponenten kombinieren und kann einfach meine eigenen Komponenten erstellen, die auf Standardkomponenten basieren.
  2. Rendern von Daten (primitive oder Referenztypen) im richtigen Format: Jede Komponente erlaubt ein Konverter zum Transformieren von Daten auf beide Arten (um das Server zu rendern und an den Server zu senden). Der Konverter ist wie üblich eine einfache Klasse mit 2 kleinen Methoden.
  3. Seitennavigation: Ich spezifiziere einen Satz von Navigationskämme in faces-config.xml. Anschließend geben ich eine Aktionattribute eines Links (oder einer Taste) an, die mit einem oder mehreren Navigationsfällen übereinstimmen sollte. Das beste Match wird von JSF ausgewählt.
  4. Implementierung des Flusses (zum Beispiel Multiform -Assistenten): Ich benutze JSF 1.2, also benutze ich Apache Orchester für den Fluss (Gesprächs-) Umfang.
  5. Formulierung: Ich habe eine ziemlich Standard-Java-Bean (Backing Bean in JSF-Begriffen) mit etwas Bereich. Ich 'kart' Formfelder auf diesen Bean -Eigenschaften. Wenn alles gut läuft (es werden keine Ausnahmen und Validierung bestanden), werden alle diese Eigenschaften mit Werten aus den Formularfeldern festgelegt. Dann kann ich eine Methode aufrufen (angegeben in der Schaltfläche Aktion Attribut) Ausführen einer Logik und Rückgabezeichenfolge, die viel zu einem meiner Navigationsfälle zum nächsten Bildschirm gehen sollte.
  6. Formulare Validierung: Ich kann einen benutzerdefinierten Validator erstellen (oder aus vorhanden aus wählen) und zu fast jeder Komponente hinzufügen. 3rd-Party-Bibliotheken haben Sätze benutzerdefinierter Ajax-Validatoren. Standard -Validatoren funktionieren erst, nachdem die Seite eingereicht wurde. Eigentlich mag ich nicht, wie die Validierung in JSF funktioniert. Zu viel Magie dort. Viele Standardkomponenten (oder vielleicht alle) haben eine vordefinierte Validierung und es ist unmöglich, sie zu deaktivieren (vielleicht nicht immer, aber ich habe viele Probleme damit getroffen).
  7. Ajax -Unterstützung: Viele 3rd-Party-Bibliotheken (MyFaces, IceFaces, OpenFaces, andere Prefixfaces ...) haben eine starke AJAX-Unterstützung und es funktioniert ziemlich gut. Bis Sie ein Problem treffen. Auch dort zu viel Magie. Es ist sehr schwierig, es zum Laufen zu bringen, wenn es nicht funktioniert, aber Sie haben richtig gemacht, wie es im Handbuch beschrieben ist.
  8. Benutzerfreundliche URLs: Leute sagen Dass es einige Bibliotheken gibt, die existieren. Und es kann getan werden mit Filtern auch. Aber ich habe es nie versucht. Es scheint zu komplex für den ersten Look.

Vielen Dank im Voraus für die Erklärung, wie diese Elemente (oder einige von ihnen) mit actionbasiertem Framework durchgeführt werden können.

War es hilfreich?

Lösung

Ich werde mein Bestes tun, um darauf zu antworten Streifen. Ich habe Struts und JSF in der Vergangenheit verwendet, aber nicht in letzter Zeit, also habe ich bestenfalls vage Vorstellungen und Gefühle darüber.

Wir sind sehr vertraut mit Streifen, verwenden es jetzt für fast alles und genießen es wirklich. Es ist einfach, in die man sich einsetzen kann, unterstützt viele der komplizierten Szenarien, aber Sie können auch außerhalb dessen arbeiten, was wirklich wichtig ist, wenn Sie Ihre eigenen AJAX -Widgets aufbauen oder mit einem anderen System oder so etwas sprechen möchten.

Wenn Sie die Streifenroute gehen, ich bestimmt Empfehlen Sie den Kauf oder Download das Buch. Es ist ein One -Stop -Shop für alles, was Sie für Streifen benötigen, und praktisch die einzige Dokumentation für Stripersist (wirklich nette Funktion, aber keine Web -Dokumente).


Rendering-Inhalt: Ich kann einsatzbereites Komponenten aus Standard-JSF-Bibliotheken (Core und HTML) oder von Libs der 3. Partei (wie RichFaces) anwenden. Ich kann einfache Komponenten kombinieren und kann einfach meine eigenen Komponenten erstellen, die auf Standardkomponenten basieren.

Das ist ähnlich. Core, HTML, FMT usw. sowie alle benutzerdefinierten Tags, die Sie finden, Inc. Anzeige: Tag, packtag und erstellen Sie Ihre eigenen. Offensichtlich handeln Sie sich jetzt nicht auf Komponentenebene, sondern mit einem Tag, das feststellt, was sich auf der Seite / an oder vom Server befindet.

Rendern von Daten (primitive oder Referenztypen) im richtigen Format: Jede Komponente erlaubt, einen Konverter für die Transformation von Daten auf beide Arten anzugeben (zum Rendern und zum Senden an den Server). Der Konverter ist wie üblich eine einfache Klasse mit 2 kleinen Methoden.

Stripes hat viele integrierte Konverter und ist einfach, benutzerdefinierte Konverter für Ihre komplexeren Datentypen zu erstellen. Stripes unterstützt sehr komplexe Datenstrukturen, die mit wenig Problem zugeordnet werden sollen. Kombiniert mit Strippersist, Zum Beispiel kann ich mein Modellobjekt direkt auf die Actionbean setzen, einige der Felder auf das Formular setzen, und Stripersist wird das Modell von der DB (basierend auf der PK) feuchtigkeit Form - alles vor der Veröffentlichung der Kontrolle an die Actionbean.

Standortnavigation: Ich legte eine Reihe von Navigationsfäden in Faces-config.xml an. Anschließend geben ich eine Aktionattribute eines Links (oder einer Taste) an, die mit einem oder mehreren Navigationsfällen übereinstimmen sollte. Das beste Match wird von JSF ausgewählt.

Die Navigation in Stripes basiert zunächst auf dem, was Sie die ActionBeans nennen. Es gibt keine XML. Zusätzlich, hübsche URLs sind eine Annotation auf der ActionBean -Ebene in Stripes 1.5, sodass Sie Dinge wie @UrlBinding("/{$event}/{model}") wo /view/5 würde dich zum "bringen"view"Ereignishandler für Ihr Modellobjekt mit der ID/PK von 5.

Implementieren von Flow (multiforme Assistenten zum Beispiel): Ich verwende JSF 1.2, daher verwende ich Apache Orchestra für den Fluss (Gesprächsbereich).

Während ich nur vage mit dem Konzept des Gesprächsumfangs vertraut bin, hat Stripes die Stripes Zaubererform Funktionalität, aber ich habe es nicht benutzt und kann das nicht wirklich erweitern. Ich denke, es ist jedoch eine ähnliche Idee.

Formularverarbeitung: Ich habe eine ziemlich standardmäßige Java-Bean (Backing Bean in JSF-Begriffen) mit etwas Umfang. Ich 'kart' Formfelder auf diesen Bean -Eigenschaften. Wenn alles gut läuft (es werden keine Ausnahmen und Validierung bestanden), werden alle diese Eigenschaften mit Werten aus den Formularfeldern festgelegt. Anschließend kann ich eine Methode (angegeben im Aktionsattribut der Schaltfläche) aufrufen, um eine Logik und eine Rückgabe von String auszuführen, die viel zu einem meiner Navigationsfälle zum nächsten Bildschirm gehen sollte.

Nicht drastisch anders. Anstelle von Komponenten in Ihrer [Aktion] Bean haben Sie jetzt Java- oder benutzerdefinierte Typen. ActionBeans werden pro Anfrage erstellt und weggeworfen, es sei denn, Sie tun es in Session, Assistent oder was auch immer. Dies ist schön, da alle Instanzvariablen den Daten aus dem Formular aus dem Formular zugeordnet werden, Sie es dann wegwerfen und sich nicht mit Synchronisierungsproblemen wie Struts befassen müssen. Nachdem Sie Ihr Ding mit den Daten gemacht haben, können Sie mit Stripes eine ForwardResolution (OK -Status), Umleitung oder Streaming (JSON, Datei usw.) senden. Das Ausleitungsmuster wird gut mit der Idee von implementiert Flash -Zielfernrohr (3/4 auf der Seite).

Formulare Validierung: Ich kann einen benutzerdefinierten Validator erstellen (oder aus vorhandener auswählen) und zu fast jeder Komponente hinzufügen. 3rd-Party-Bibliotheken haben Sätze benutzerdefinierter Ajax-Validatoren. Standard -Validatoren funktionieren erst, nachdem die Seite eingereicht wurde. Eigentlich mag ich nicht, wie die Validierung in JSF funktioniert. Zu viel Magie dort. Viele Standardkomponenten (oder vielleicht alle) haben eine vordefinierte Validierung und es ist unmöglich, sie zu deaktivieren (vielleicht nicht immer, aber ich habe viele Probleme damit getroffen).

Stripes ermöglicht die Validierung in Anmerkungen der Instanzvariablen in der Aktion. Sie ermöglichen einige Standardeinstellungen, erforderlich, maximal usw. oder Sie können immer Ihre eigenen erstellen. Die Standardeinstellung ist leicht hinzuzufügen und flexibel, während immer die Möglichkeit besteht, etwas vollständig angepasst zu machen.

AJAX-Unterstützung: Viele Bibliotheken der dritten Party (MyFaces, Eisgefertigungen, OpenFaces, andere Prefixfaces ...) haben eine starke AJAX-Unterstützung und es funktioniert ziemlich gut. Bis Sie ein Problem treffen. Auch dort zu viel Magie. Es ist sehr schwierig, es zum Laufen zu bringen, wenn es nicht funktioniert, aber Sie haben richtig gemacht, wie es im Handbuch beschrieben ist.

Dies war mein großes Problem mit der JSF -Art, Dinge zu tun. Selbst wenn Sie das Widget richtig gemacht haben, sind Sie immer noch mit diesem Widget festgefahren. Mit Stripes können Sie das neueste und größte JQuery verwenden, und solange Sie das richtige Get oder Post an den Server senden, weiß Stripes, was Sie damit tun können, und können JSON problemlos zurücksenden. Ich denke, Komponentenrahmen passen vor ein paar Jahren viel besser, als Ajax hart war, aber JQ macht es jetzt so einfach.

Benutzerfreundliche URLs: Die Leute sagen, dass es einige Bibliotheken dafür gibt. Und es kann auch mit Filtern geschehen. Aber ich habe es nie versucht. Es scheint zu komplex für den ersten Look.

@Urlbinding, Es ist so einfach.

Andere Tipps

Meine Antwort ist nicht diejenige, die Sie hören möchten: Wechseln Sie nicht vom Komponenten -Framework zum Aktions -Framework

Nach vielen Jahren der Action -Framework -Entwicklung habe ich umgekehrt und gehe nie zurück.

Von den 8 Anwendungsfällen, die Sie erwähnt haben, fällt Ihnen nur an einen in den Sinn, in dem Aktionsrahmen offensichtlich besser sind, und das sind URL -Design / freundliche URLs. Es kann auch in Komponentenrahmen erfolgen, aber in Aktionsrahmen viel einfacher (insbesondere in Streifen, in denen Sie Ihre ActionBean mit der URL nur annotieren).

Ich würde Ihnen raten, Wicket auszuprobieren, es ist sehr einfach zu lernen (viel einfacher als JSF), und Sie können auch viele vorhandene Komponenten wiederverwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top