Frage

Ich werde etwas näher darauf eingehen.Aus Designersicht ist die Arbeit mit Jsf ziemlich mühsam, etwa so, als würde man versuchen, mit gefesselten Händen ein Bild zu zeichnen, aber es eignet sich gut zum Zerkauen von Formularen und zum Auflisten großer Datenmengen.Bei den Websites, die wir in meinem Unternehmen erstellen, handelt es sich also um JSF-Administratorseiten und JSP-Benutzerseiten.Das Problem tritt auf, wenn Benutzerseiten komplizierte Formulare usw. enthalten und JSF einsetzt.

Hier ist die Frage:Ich bin auf einer reinen JSP-Seite.Ich muss auf eine JSF-Seite zugreifen, die Session Bean verwendet.Wie kann ich diese Bean initialisieren?Wenn ich auf der JSF-Seite wäre, könnte ich einen CommandLink haben, der Daten vorbereiten würde.Das Einzige, was mir einfällt, ist eine Dummy-JSF-Seite, die die Arbeit erledigt und mich zur benötigten JSF-Seite weiterleitet, aber das ist irgendwie hässlich und ich möchte nicht mit 50 Dummy-Seiten enden.Ich würde lieber einen Mechanismus finden, um Beans, die sich bereits in einer Sitzung befinden, mit einigen gewünschten Parametern neu zu initialisieren.

Bearbeiten:noch ein paar Details.In dieser speziellen Situation habe ich Tests, die entweder vollständig oder gefiltert sind.Es handelt sich um denselben Test mit derselben Logik und allem, außer wenn der Test gefiltert wird, sollten je nach Antworten einige Fragen eliminiert werden.Wenn Sie auf einen Link klicken, sollte ein angeforderter Test in einem der beiden Modi gestartet werden.Links sind Teile des Hauptmenübaums und auf vielen gleichgeordneten JSP-Seiten sichtbar.Meine Aufgabe ist es, 4 Links zu haben:testA voll, testA gefiltert, testB voll, testB gefiltert, dass alle auf derselben JSF-Seite führen und TestFormBean entsprechend neu initialisiert werden sollte.

Bearbeiten:Ich habe ein wenig über Facelets recherchiert, und obwohl es mir jetzt nicht weiterhilft, werde ich es auf jeden Fall für das nächste Projekt im Hinterkopf behalten.

War es hilfreich?

Lösung

Um dieses Problem zu lösen, würde ich wahrscheinlich ein JSF-Fragment erstellen, das nur Ihr Formular enthält, und dann a verwenden <c:import> Tag, um es in meine JSF-Seite aufzunehmen.

Abhängig von Ihrer Umgebung ist diese Lösung jedoch wahrscheinlich etwas fragil.

BEARBEITEN:Siehe Chris Halls Antwort: FacesContext ist außerhalb nicht verfügbar FacesServlet.

Andere Tipps

Haben Sie über die Verwendung von Facetten nachgedacht?Damit können Sie die gesamten Unterschiede zwischen JSF und JSP beseitigen (es handelt sich um einen alternativen und überlegenen Ansichtscontroller).

Außerdem unterstützt es mit dem jsfc-Tag eine hervorragende Design-Time-Semantik ...

<input type="text" jsfc="#{SomeBean.property}" class="foo" />

wird intern in das richtige JSF-Material übersetzt, sodass Sie mit Ihren vorhandenen Tools arbeiten können.

Sie können eine verwaltete Bean innerhalb einer Tag-Bibliothek wie folgt abrufen:

FacesContext context = FacesContext.getCurrentInstance();
Object myBean = context.getELContext().getELResolver().getValue(context.getELContext(), null, "myBeanName");

Sie müssen jedoch die Tag-Bibliothek einer Ihrer JSF-Seiten verwenden.FacesContext.getCurrentInstance() gibt null zurück, wenn es außerhalb des FacesServlet aufgerufen wird.

Eigentlich habe ich das Problem gelöst, indem ich die Bean aus der Sitzung entfernt habe, sodass sie beim Aufruf der JSF-Seite erneut generiert werden muss.Dann übernehme ich Get-Parameter aus einer Anfrage im Konstruktor.

Erstellen Sie einen benutzerdefinierten JSP-Tag-Handler.Anschließend können Sie die Bean aus dem Sitzungsbereich abrufen und sie dann im laufenden Betrieb initialisieren.Sieh dir das an Lernprogramm für mehr Details.

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