Erstellen von master-detail-Seiten für Personen, wie Sie zu verbinden und die bean-scope zu wählen
Habe ich angefangen zu lernen, JSF, aber leider die meisten tutorials gibt derzeit nur ein Protokoll oder ein register, Abschnitt.
Können Sie zeigen Sie mir etwas mehr in die Tiefe Beispiele? Eine Sache, die mich interessiert, ist eine Seite mit einer Liste von Produkte. Ich bin auf Seite Hause und ich drück auf Seite Produkte, so dass ich sehen kann, die neuesten Produkte Hinzugefügt. Und jedes mal, wenn ich Besuch die Seite, die Produkt-Liste erstellt werden die neuesten Einträge in der Datenbank. Wie kann ich das umgehen?
Einen Weg, um dieses Problem zu lösen wäre erstellen einer session scoped managed bean, in denen ich verschiedene Entitäten aktualisiert durch andere managed beans. Ich fand diese Art von Ansatz in einigen tutorials, aber es scheint ziemlich schwierig und umständlich.
Was wäre der beste Ansatz, um zu lösen, eine Sache wie diese? Was ist die korrekte Verwendung von session-scope in zwei-Seite master-detail user interface?
Auch müssen in der Liste der Produkte auf der Produkte - Seite nur. Und jedes mal, wenn ich Besuch die Seite, die Produkt-Liste erstellt werden die neuesten Einträge in der Datenbank. Wie kann ich das umgehen?
Ich wünschte, gab es mehr Fragen und Antworten, wie dies für eine richtige backing-bean-Nutzung. Die meisten Beispiele, die Sie sehen, sind einfach nur falsch.
Der Frage-Titel stellen nicht Ihre Inhalte. Die master-detail-Konzept ist völlig Verschieden von einem einfachen Produkt-Listen-Seite.
InformationsquelleAutor TGM | 2011-12-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie es für session-scoped nur Daten, sonst nichts. Zum Beispiel, den angemeldeten Benutzer an, dessen Einstellungen, die der gewählten Sprache, etcetera.
Siehe auch:
In der Regel verwenden Sie das Anfrage-oder view-Bereich. Das laden der Liste geschehen soll, in einem
@PostConstruct
Methode. Wenn die Seite nicht enthalten<h:form>
, dann die request-scope ist in Ordnung. Ein Blick scoped bean würde sich Verhalten wie ein request-scoped, wenn es keine<h:form>
sowieso.Alle "Ansicht " Produkt" und "Produkt Bearbeiten" - links/buttons, die nur abrufen von Informationen (also idempotent) whould werden einfach nur BEKOMMEN
<h:link>
/<h:button>
wobei Sie übergeben die entity-id als request-parameter durch<f:param>
.Alle "Produkt löschen" und "speichern " Produkt" links/buttons, die manipulieren Informationen (d.h. nicht-idempotent) durchführen sollte BEITRAG von
<h:commandLink>
/<h:commandButton>
(wenn Sie nicht wollen, zu sein, bookmarkable/searchbot-Wendeplatten -!). Dies wiederum erfordert eine<h:form>
. Um zu bewahren die Daten für die Validierungen und ajax-Anfragen (so dass Sie nicht brauchen, um neu zu laden/: preinitialize der Entität, auf jede Anfrage), die Bohne sollte vorzugsweise Ansicht beschränkt.Beachten Sie, dass Sie sollten grundsätzlich eine separate bean für jede Ansicht und beachten Sie auch, dass diese Bohnen nicht unbedingt aufeinander beziehen.
So, da dieses "Produkt" entity:
Und dieses "Produkt-service" EJB:
Kannst du diese "Produkte anzeigen" auf
/products.xhtml
:- Und Sie können dieses "Produkt Bearbeiten" auf
/products/edit.xhtml
:Und dieser Konverter für
<f:viewParam>
"Produkt Bearbeiten":Siehe auch:
Danke!!! Ihre blog-post gab mir alle Antworten die ich brauchte.
wie würden Sie die Einbindung Ihrer Anregung auf die gleiche Seite, für Schnitte und Ansichten in diesem Beitrag stackoverflow.com/questions/8768117/... wenn dieser post hat eine backing-bean-Methode, setzt die Bearbeiten Boolesche aber du bist hier, was einen einfachen link? Ich mag die oben genannten, ist es einfach, aber ich möchte auch sagen, "hey, sind Sie nicht befugt, zu Bearbeiten' und redirec/fwd zu Lesen, nur wenn jemand errät die URL 'Bearbeiten.xhtml?product_id=### " ich weiß, dieser Beitrag ist alt, vielleicht haben Sie einige aktualisierte Weise, Dinge zu tun, jetzt
vielen Dank für dieses tolle Beispiel, das Sie meinen Tag gerettet 🙂
InformationsquelleAutor BalusC
Als eine kleine Verbesserung zu dem, was BalusC empfohlen, manchmal können Sie entfernen Sie die
required
/requiredMessage
Teil aus der<f:viewParam>
Ihre Fenster "details" und verwenden Sie stattdessen den bedingten Darstellung des Bearbeiten-Formulars (als BalusC hast) mit einem reverse Voraussetzung für die Empfehlung einer bestimmten link für die "Liste" /"master" - Bildschirm oder sogar eine viewAction, dass würde testen Sie die param und erzwingen eine Umleitung auf die Liste.InformationsquelleAutor Eduard Korenschi