GET in struts und JSF

Status
Nicht offen für weitere Antworten.

Sascha Laurent

Aktives Mitglied
Hallo Leute,

ich beschäftige mich gerade mit Struts und JSF, und bin dabei eine kleine Adressverwaltungs-Anwendung auf jeweils einmal auf JSF und einmal auf Struts aufzubauen. Hierzu habe ich zwei Seiten. Die erste Seite zeigt mit eine Liste aller Adressen an. Die zweite Seite soll mir zu jeder Adresse jeweils Details anzeigen. Hierzu habe ich jetzt aber eine grundlegende Frage, die ich noch nicht so ganz verstehe, und ich hoffe Ihr könnt einem Laien weiterhelfen.

Ich möchte jeder Adresse in der Adressliste die ID in der Datenbank als Link mitgeben. Also in der Form

http://localhost/myaddr/addrlist.jsp?id=12

Wie kann ich die ID ermitteln, um auf der Detailseite die korrekten Adressedetails anzuzeigen? Und gibt es evtl. elegantere Wege?

Danke
Sascha
 

JanHH

Top Contributor
URLs in der Form bekommt man mit JSF eh nur mit Umwegen hin (aber es geht). Die ID kann man als Paramter übergeben (bei h:commandLink mit f:param), und dann mit
Java:
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("<name>");
auslesen.

h:commandLink generiert allerdings nur Links, die genau wie Buttons funktionieren und per javascript das Form-Submit auslösen. Ist nicht unbedingt das, was man will. Ich habe dafür mal eine eigene JSF-Komponente, die einen "richtigen" Link erzeugt, programmiert. Dabei werden dann natürlich die meisten Phasen des JSF-lifecycle übersprungen, aber das macht auch nicht unbedingt was. Ist auch eine schöne Übung im Komponenten-schreiben..
 

Prismapanda

Aktives Mitglied
Dazu leg ich dir mal folgende Seite ans Herz:
The BalusC Code: Using datatables
Insbesondere die Sektion über getDataTable Row.

Sagen wir du hast eine Tabelle mit deinen Adresseinträgen. Die Tabelle bindest du an die BackingBean (HtmlDataTable table) und kannst dann in der BackingBean mittels (Adresse)table.getRowData() die Adresse herausfinden, auf welche in der Tabelle geklickt wurde und entsprechend anzeigen. Wie gesagt, die Seite erklärt die Mechanismen ganz gut.
Möglicherweise gibt es ab JSF 2.0 da auch andere Möglichkeiten, damit hab ich mich noch nicht auseinandergesetzt, aber die Möglichkeit übers Binding funktionierte bei mir bisher recht gut.
 

JavaFips

Mitglied
URLs in der Form bekommt man mit JSF eh nur mit Umwegen hin (aber es geht).


Nun sind Skript-Aufrufe mit irgendwelchen IDs in der URL-Extension ja gerade in der PHP-Welt Gang und Gäbe.

Wie sieht es denn da vom Konzept bei JSF aus? Man kann so eine URL zwar auch über .htaccess / mod_rewrite ein wenig verschönern und verschleiern, dass da eigentlich eine ID angehängt wird, aber deswegen kommt man ja bei dieser Art der Übertragung nicht drumrum, dass irgendein Code die ID verarbeiten müsste.

Wenn also nicht auf dem Weg, den Prismapanda anstrebt, wie ist es denn dann in JSF eigentlich vorgesehen, on the fly Werte zu übermitteln? ;)
 
Zuletzt bearbeitet:

JanHH

Top Contributor
In JSF ist das übermitteln von irgendwas über URLs gar nicht vorgesehen, da es ausschliesslich auf POST und Form-Submit-Buttons basiert. Es gibt zwar auch h:commandLink, aber der erzeugte Link tut auch nichts anderes als eine javascript-Funktion aufzurufen, die den Form-Submit auslöst.

Ein Mangel an JSF ist das fehlen eines Front-Controllers, der die GET-Requests verarbeitet, bevor der JSF-lifecycle aufgerufen wird. Seam liefert das quasi nach. Man kann das aber einigermassen umgehen, indem man sich seine eigene JSF-Komponente für HREFs bastelt, und wie beschrieben auf die Parameter zugfreifen, und ggf. noch per PhaseListener sich in den JSF-Zyklus einklinkt.

Ich denke, da wird sich noch einiges tun in der Zukunft, bzw. das seam-Konzept wird standardisiert werden. Die Sache mit der selbstgeschriebenen URL-Komponente hat aber auch ihren Reiz, weil man dabei eine Menge über JSF lernen kann (sowohl über das Programmieren eigener Komponenten als auch, wie man intern wieder an die Werte rankommt, und wie der Lifecycle so aussieht).
 

JanHH

Top Contributor
Hab das jetzt mal mit seam gemacht, ist wirklich sehr einfach.

Im der xhtml-Datei den Link mit s:link erzeugen, da den Parameter mit f:param einbauen:
Java:
<s:link  value="#{element.name}" view="/eineseite.xhtml">
   <f:param name="id" value="#{element.id}" />
</s:link>

Eine stateful EJB, mit der man auf den Parameter zugreifen kann:

Java:
@Name("eineBean")
@stateful
public class XYZ ...
{
   private long id;

und ein paar Zeilen in der pages.xml:

Java:
<page view-id="/eineseite.xhtml">
   <param name="id" value="#{eineBean.id}" />
</page>

Das ist schon alles.

Ich muss sagen, wenn man einmal mit seam gearbeitet hat und sieht, wie einfach und elegant alles quasi "wie von selber" funktioniert, will man nicht mehr ohne programmieren..
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I heutzutage Struts 1 oder 2 in der Praxis? Web Tier 4
K Struts Struts forwarded lokal auf fertige Webseite Web Tier 2
M Struts 2 - "There is no Action mapped for namespace..." - globale Lösung? Web Tier 3
S Tomcat 7, Struts, JPA baut keine Verbindung auf Web Tier 13
D Struts 2 , DIV Container mit verschiedner Farbe Web Tier 2
K Struts request Zugriff Web Tier 4
2 Anwendung mit Zuständen und Struts Web Tier 5
P Struts 2 Download Dateinamen Web Tier 2
ruutaiokwu struts 2 & jsf kombinieren Web Tier 2
D Struts und CSS Web Tier 4
7 Struts+AJAX- Session-Handling? Web Tier 2
7 Struts und Ajax. Problem mit Actions Web Tier 2
7 Struts iterator index JS-Funktion übergeben?? Web Tier 2
7 Struts: bei action immer ein Result nötig? Web Tier 2
7 Struts vom popup wieder zurück ins alte Fenster? Web Tier 2
7 statische Variablen in Struts-Tags nutzen? Web Tier 6
7 Struts Performance-Schwäche Web Tier 5
7 Struts Actionaufruf durch JS Web Tier 4
L Struts 2 Iterator Validation Web Tier 4
Tandibur Struts 2 - Startseite festlegen Web Tier 5
J Struts aus JSP ActionForm-Eigenschaft lesen Web Tier 5
7 Struts 2 nebeneinanderliegende Textfelder Web Tier 4
E Struts: Text in JSP aus Action heraus setzen Web Tier 4
F Struts Tabellen Web Tier 3
F Meinungsumfrage Struts / Javascript Web Tier 3
F Problem mit Struts Web Tier 2
T Json mit Struts 2 Web Tier 2
2 Blätterfunktion in Struts? Web Tier 2
S Struts - Http Port ändern Web Tier 11
L Struts JSTL Form Variable Übermitteln Web Tier 2
O JSP: HTML tags werden vor struts tags angezeigt Web Tier 3
L Struts Validation Error Web Tier 17
L STRUTS: javax.servlet.jsp.JspException Web Tier 3
O struts - Gültigkeit einer Action an Session binden?! Web Tier 4
N MessageResources von Struts in Form-Bean Web Tier 4
pusteblume JavaScript mit Struts auslesen? Web Tier 3
A Struts - JSP - HTML - Visualisierungsproblem Web Tier 3
M Properties der JSP nach input-result leer (Struts 2) Web Tier 2
M Zugriff aus eigenen Tags auf Struts Value Stack Web Tier 2
M Struts 2 Submit Button lokalisieren Web Tier 5
G Struts 2 Validation Web Tier 5
pusteblume Struts multibox - dynamische checkboxen Web Tier 5
G Struts 2 - Validation Frage Web Tier 5
T Action mapping Frage (Struts) Web Tier 2
J Struts 2 session ID auslesen? Web Tier 5
G Kurze Frage zu Servlets&Struts Web Tier 4
G Performance Struts vs Faceltes vs JSP Web Tier 9
N Struts - reset, wie komme ich an das ActionMapping Web Tier 2
T In einem Struts Tag Werte mit Java einfügen Web Tier 2
B struts-blank, eclipse und tomcat6 konfigurieren Web Tier 7
O Struts Grundlagen Frage Web Tier 32
T Tabelle mit checkboxen in Struts Web Tier 19
T Button abfrage mit Struts leicht gemacht ? Web Tier 3
B Struts: html:checkbox Web Tier 2
U Problem bei Validierung mit Struts 2 Web Tier 1
A JSF und Struts unter einen Hut bringen (SingleSignOn) Web Tier 2
R Webhoster mit Struts Web Tier 13
S Struts: Validierung mit mask Web Tier 2
G radio button deselect mit struts Web Tier 7

Ähnliche Java Themen

Neue Themen


Oben