Was soll ich verwenden: Spring MVC oder JSF + Primefaces !?

stargate2k

Cadet 3rd Year
Registriert
Feb. 2011
Beiträge
33
Hi,

ich bin gerade dabei ein kleines Projekt aufzusetzen im Kern geht es um einen open data viewer.
Ich bekomme also irgenwelche frei verfügbaren Daten z.b im CSV-Format muss diese dann einparsen und grafisch darstellen.
Nach dem einparsen soll dynamisch aus der eingelesenen CSV-Datei ein TreeView Ansicht generiert werden in der man auswählen kann, welche Werte visualisiert werden sollen. Nach der Auswahl soll dann rechts daneben ein Chart angezeigt werden. Auch muss man die Möglichkeit haben die TreeView zu persistieren(Also welche Werte man darin angeklickt hat sollte man speichern können) und es sollte möglich sein die Werte die man in der TreeView angeklickt hat wieder schritt für schritt rückgängig zu machen.. Da ich immer unterschiedliche Daten bekommen sollte es halt sehr dynamisch sein.

Ich wollte eigentlich Java Server Faces + Primefaces verwenden, ich bin mir aber unsicher ob JSF flexiebel genug ist, da man ja dort sehr an die bereitgestellten UI-Komponenten gebunden ist.. Dort gibt es zwar schon ein TreeView und auch verschiedene Charts aber ich bin mir noch unsicher in wie weit man diese noch anpassen kann.. Als Charts sollen vll auch nicht die integrierten CHarts von Primefaces sondern evtl D3JS-Charts verwendet werden, ich weiß nicht wie gut dass dann z.b mit der TreeView zusammen arbeitet.

die Alternative dazu wäre SpringMVC+Bootstrap


Ahja die Anwendunge sollte auch auf Mobile Devices laufen.. daher wäre eine gute Skalierung der Komponenten nicht schlecht, Bootstrap bietet sowas ja von Haus an bei JSF bin ich mir nicht sicher.

Mich würden daher Meinungen interessieren welche Technoligien ihr hier verwenden würdet und wieso.. Voranging geht es erstmal um SpringMVC VS JSF+Primefaces

mfg stargate
 
Ich würde hier wohl auch zu Spring MVC fürs backend tendieren und die Daten über einen Service rauspusten. Für die ganze Darstellung würde ich mir aber was aus der JS-Gegend suchen in Verbindung mit Bootstrap. Hier hat z.B. jemand eine Tree View mit Angular gebaut. Weiß nicht, ob das so aussieht, wie du es dir vorgestellt hast.
 
Hi,

spring mvc + angular habe ich mir auch schonmal überlegt.. Ist aber irgendwie doppelt gemoppelt dann oder? Bringt mir den Angular für meinen konkreten Anwendungsfall irgendwelche Vorteile ? Ich habe mich noch nicht mit Angular beschäftigt da müsste ich mich erst reinarbeiten.

Bei SpringMVC mit JSP-Seiten habe ich halt noch den Vorteil dass ich per Java noch leichter Daten mitgeben kann oder bestimmte Elemente mit JavaCode generieren kann..

mfg stargate
 
JSPs und Angular widersprechen sich ja nicht. Du kannst durchaus JSPs zur Auslieferung des Markups nutzen. Ich würde es aber aufs Nötigste beschränken. Wenn dir JSPs nun aber so viel mehr liegen, kannst du natürlich die Gewichtung da verschieben.

Einer der wichtigsten Vorteile eines JS-Frontends für deinen Anwendungsfall ist, dass es viel dynamischer auf Nutzereingaben reagiert. Sonst musst du ja bei Veränderungen der Userauswahl ständig submitten und die ganze Seite neu laden. Das ist nicht mehr zeitgemäß.

Das Daten mitgeben kannst du theoretisch noch mit JSP-Logik machen, allerdings ist es da inzwischen üblicher diese Daten über REST-Schnittstellen zur Verfügung zu stellen (was mit Spring MVC kinderleicht ist), gegen die der Browser des Users dann direkt per Ajax funken kann. Sowohl lesend als auch schreibend.

Es kommt halt auch darauf an, was deine Motivation für das Projekt ist und wie viel Zeit du hast. Wenn es dir darum geht was zu lernen und einen modernen Ansatz zu probieren, dann wäre der JS-Weg interessant. Wenn du allerdings hier nur deine "Arbeit" abliefern musst, dann solltest du natürlich etwas wählen, was dir schon liegt.
 
Ich persönlich würd Spring fürs Backend und AngularJS fürs ui verwende.
Kannst dir in dem kontext ja mal http://jhipster.github.io/ anschauen.
JSF und Bootstrap is so eine Sache. Bootstrap kannst du mit Standard JSF components erst seit JSF 2.2 verwenden wenn ich so direkt jetzt nicht irre. Auch dann ist es aber ein wenig mühsam. Das hängt mit dem Attribute handling von JSF zusammen.
Abgesehen davon kannst auch eigene Komponenten mittels JSF erstellen. Mit Composite component ist das erstellen von einem custom treeview aber ned so einfach. Der Grund liegt darin das Rekursion auf die Art nicht möglich ist.
 
Hi,

ich hab dafür schon ein paar Monate zeit und es soll auch was gescheites dabei rauskommen..

Was meinst du damit ich kann JSP und Angular verwenden ? Über die MVC Controller sende ich ja dann nur Daten(JSON oder sonstiges) an Angular..
Ich wollte auch noch Spring Security für den Login usw verwenden, das ist mit Angular dann vermutlich auch umständlicher.. Mich würde AngularJS schon reitzen, aber es muss mir auch was bringen, nur damit ich sagen kann ich verwende Angular bringt es nicht.. Ich habe auch gelesen dass man in Angular auf DOM objekte nicht zugreifen soll. Aber ich kann in Angular auch die ganz normale Jquery ,D3js usw Syntax verwenden? Bzw ich kann mir z.b auch eine ganz normale TreeView in javascript holen und diese einbinden ? Ich frage nur deshalb weil das obige TreeView Beispiel speziell für Angular geschrieben ist..

Noch ne andere Frage, wenn ich Angular verwende dann brauche ich auch keine extra Template Engine wie Sitemesh oder Thymeleaf mehr oder ?

mfg stargate
 
Das nette an Angular ist, dass es sich gut mit anderen Technologien (z.B. jQuery) verträgt. Du kannst zum Beispiel auch deine ganze Seite strukturell mit JSPs erzeugen (includes für die einzelnen Bestandteile, Navigation, usw.) und dann ganz gezielt nur für die Stellen, wo es sinnvoll ist, also z.B. die Präsentation deiner tree view, innerhalb eines divs anfangen Angular einzusetzen.
Dass von Angular abgeraten wird, wenn man intensiv am DOM tree schraubt, habe ich auch gelesen. Deswegen habe ich ja versucht es allgemein zu halten und generell zu JS geraten. Da gibt es ja noch viel mehr. Da das aber nicht mein Spezialgebiet ist (bin eher im backend unterwegs), kann ich dir die Evaluation da nicht abnehmen.

Du kannst natürlich auch noch thymeleaf o.ä. draufsetzen. Das serverseitige Erzeugen des Markups steht der Dynamik mit JS auf Browserseite grundsätzlich nicht im Wege. Du platzierst ja im Endeffekt nur einige Anker im Markup womit JS dann arbeitet. Das zugehörige JS lieferst du ja separat in statischen .js files aus.
 
Wenn du Angular verwendest willst auch ned so wirklich direkt mit DOM herum schrauben. Das herumschrauben am DOM macht ja eben Angular für dich. Änderungen am vom Angular verwalteten Datenmodel werden automatisch im DOM reflektiert. Was jetzt nicht heißen soll, das du nicht könntest. Für D3 gibts auch eine form von direkter integration. Hab die aber noch nicht verwendet und kann dir daher nichts dazu sagen. Im Allgemeinen kann ich dir sagen, dass ich immer häufiger bei Jobs lese, dass Angular im technology screening auftaucht. Würd da im Allgemeinen keinen Performance Probleme erwarten. Ich weis ja nicht was du genau machen willst. Wennst paar Tausend listeneinträge machst würd ichs erst mal mit nem Prototypen testen. Aber ansonsten seh ich da kein Problem.

Hab dir extra einen Link gepostet mit einem Generator bei dem im Grunde alles inklusive Spring Security out of the Box funktioniert.

Allgemein ist Spring Boot, AngularJS, Bootstrap sicher ein gute Möglichkeit um schnell auf ein qualitative gutes Ergebnis zu kommen.
 
Hi,

ich habe noch ne Frage zu Angular.. Nehmen wir mal an ich will ne Tabelle mit mal übertrieben 10000 Einträgen mit Angular darstellen. Wenn ich jetzt merke, dass der client probleme hat die 10000 Einträge zu rendern.. welche Möglichkeiten hätte ich dann um die erzeugung der Tabelle Serverseitig zu machen ? Einfach in nem Rest-COntroller die Tabelle auf dem Server bauen und dann die fertige Tabelle als String zur Seite schicken wo diese dann nur eingebunden wird, oder gibt es da noch elegantere Lösungen !?

mfg stargate
 
Paging ist die eine Möglichkeit. Alternative wenn alles auf eine Seite soll - beim Scrollen lädt der Client asynchron weitere Teile der Tabelle nach, d.h. es werden auch immer nur Teile vom REST-Service abgerufen. Wenn es dann immer noch Performance-Probleme gibt, geht es ans Caching. Lässt sich ja gut vorhalten sowas.
 
Zurück
Oben