Commandlink funktioniert nicht

Liebe/-r Experte/-in,
ich bin eine Anfängerin in JSF und überhaupt in der Webentwicklung, hab aber eine Aufgabe bekommen, ein Webstore mit EJB zu entwickeln. Ich habe eine ComboBox mit Kategorien. Wird eine Kategorie ausgewählt, werden in der unteren Tabelle die Produkte aufgelistet. Klickt man ein Produkt an, soll eine andere Seite mit Details zu diesem Produkt angezeigt werden.
Ich habe eine stateless session Bean(Warenliste), die mir die Produkte aus der Datenbank holt. Die ClientBean ruft die Produkte von der WarenlisteBean ab und übergibt sie an die Tabelle.

Mein Problem:
Wenn ich eine Kategorie auswähle, werden mir die Produkte angezeigt. Wenn ich aber auf ein Produkt draufklicke, bleib ich auf der gleichen Seite.
Ich habe noch eine Frage: kann ich meine Tabelle erst dann einblenden, wenn ich eine Kategorie ausgewählt habe?
Wenn ja, wie funktioniert das?

Mein Code sieht folgendermaßen aus:

/////////////////////////////////////////////
Code von meiner ClientBean:
public List getCategories()
{
return listEJB.getCategories();
}

public void setSelCategorie(String selCategorie) {
this.selCategorie = selCategorie;
}

public String getSelCategorie() {
return selCategorie;
}

public String ShowDetails()
{
return „Details“;
}

public String fillSongList()
{
getCatSongs();
return null;
}

public List getCatSongs() {
CatSongs = null;
CatSongs = listEJB.getAllSongs(selCategorie);
return CatSongs;
}

Ich hoffe, Du kannst mir da weiterhelfen.
Ich weiß leider gar nicht nach was ich bei diesem Problem suchen soll.

Vielen Dank und Viele Grüße,
Lilia

Hi,

Weiter Frameworks stehen dir offen?

Dann würde ich dir Seam dazu empfehlen.

Damit ist das ganze nur eine Vorgehensfrage, wie du die Navigation realisieren willst.

Du kannst aus dem Code heraus navigieren, oder die Navigation von den Seiten her lösen.

Ich persönlich finde, dass aus aus der Navigation heraus am schönsten ist.

ProduktIdNameAction

Oder du benutzt einen Redirct im Javacode setzt alle benötigten parameter über

redirect.setParameter(String parametrName, String übergabewert)
redircet.setViewId("/mySite");
redirect.execute();

So zu deiner anderen frage, diese habe ich dir auch schon beantortet in diesem codeschnipsel :smile:

du machst dir in der List n boolean. rendered="#{MyListBean.WareIstAusgewehlt}"

On select der Combobox führst du ja die Listfunktion aus.

Da setzt du dann einfach den boolean auf true. Dann benutzt du noch den a4j: support und reRenderst onselection oder onblur den Table

Ich hoffe ich hab mich jetzt an alles errinert was du fragen wollstest (bin grad aufgestanden und noch etwas müde)

Hallo Dark Elements,
muß ich mein Projekt dann als Seam-Projekt anlegen?

Vielen Dank für die ausführliche Antwort.

Hallo Dark Elements,

ich arbeite mit Eclipse und hab dort versucht, die Seam Tools upzudaten, jedoch hat es ewig gedauert und ich habs abgebrochen. Ich habe aber rausgefunden, dass ich den managed-bean-scope Attribut meiner ClientBean auf session setzen muß. Das Verlinken funktioniert nun, aber das Einblenden mit dem renderer Attribut nicht. Ich habs so gemacht, wie Du beschrieben hast, aber ich krieg keine Tabelle angezeigt.
Weißt Du vielleicht, woran das liegen kann?

Vielen Dank für die Hilfe.

Viele Grüße,
Lilia

hi,

post mir doch nochmal die jetzige bean und die xhtml ich hab die gerade ma wieder nicht im kopf^^

eigentlich müsste im a4j:support nur eine funktion stehen die onchange bzw onblur oder onselected ein boolean auf true setzt. danach müsste der table sichtbar werden.

wie gesagt auch mal mit onblur oder onselect probieren.
(Siehe tag information, kannst du unter http://livedemo.exadel.com/richfaces-demo/index.jsp alles nachschlagen)

du kannst den auch mal in eine a4j:region setzen um ganz sicher zu gehen und diese halt rendern lassen wenn etwas ausgewählt wurde.

wichtig ist dass im reRender des supporttags die ID des tables bzw der a4j:region steht (ich weiss grad nicht ob das case sensetiv ist oder nicht aber vorsichtshalber einfach machen…)

Grüße

DE

Hallo DE,

Danke für Diene Antwort. Ich habe alles ausprobiert, leider klappt es aber nicht. Meine Bean sieht folgendermaßen aus:

private String selCategorie;
private List CatSongs;
private boolean SongIstAusgewaehlt = false;

@EJB(name = „MP3Download_JavaEE/WarenlisteBean/local“)
WarenlisteLocal listEJB;

public void setSelCategorie(String selCategorie) {
this.selCategorie = selCategorie;
}

public String getSelCategorie() {
return selCategorie;
}

public List getCategories() {
return listEJB.getCategories();
}

public String fillSongList() {
SongIstAusgewaehlt = true;
getCatSongs();
return null;
}

public List getCatSongs() {
CatSongs = null;
CatSongs = listEJB.getAllSongs(selCategorie);
return CatSongs;
}

public boolean isSongIstAusgewaehlt() {
return SongIstAusgewaehlt;
}

// Ich hab diese Methode etwas abgekürzt
public String ShowDetails() {
return „Details“;
}

//////////////////////////////////////////////////
Hier kommt meine JSP-Seite:

Hey

hast du das ganze mal gedebuggt?
rerender mal das ganze grid.
hast du das mal in anderen Browsern getestet?

Lad dir mal für ff das plugin web-developer und firebug dann hast du auch die volle übersicht von der html und javascript seite. ist echt hilfreich

Als tipp für später wenns ums debuggen geht:

bevor du eine List füllst prüf erst ob sie != null ist wenn sie es ist benutzt die clear methode, wenn nicht erzeugst du eine neue ArrayList(), so verhinderst du später doppelte ausgaben

Setzte für h:form und andere komponenten IMMER eine ID, manchmal kommt man um JavaScript nicht rum, da ist es leichter eine ID zu haben. Ausserdem ist das bei Fehlermeldungen besser, dann weisste wo und hast nit irgend eine kryptische.

ich gucke mir das ganze morgen mal genauer an. bin jetzt schon etwas müde… Wenn ich den fehler nit finde, schick ich dir mal ein bei mir funktionierendes bsp.

Grüße

DE

Hi,
VIELEN VIELEN DANK FÜR DEINE HILFE :smile:. Ich hab jetzt die Lösung, versteh aber nicht, warum das so funktioniert und nicht anders. Ich habe nur eine Kleinigkeit verändert, und zwar habe ich mein DataTable in ein panelGrid reingesetzt und dieses panelGrid gerendert.
Meine JSP sieht jetzt so aus:

Weißt Du vielleicht, warum das so funktioniert?

Viele Grüße,
Lilia