Commandlink funktioniert nicht

Von: , 14.08.2009 15:25 Uhr

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:
<h:form>
<h:panelGrid columns="1">
<h:outputText value="Kategorie: " />
<rich:comboBox width="200" id="combo"
value="#{ClientBean.selCategorie}"
defaultLabel="Waehlen Sie eine Kategorie aus">
<f:selectItems
value="{ClientBean.categories}" />
<a4j:support event="onselect" action="#
{ClientBean.fillSongList}"
reRender="SongTable" />
</rich:comboBox>
</h:panelGrid>
<br>
<br>
<h:dataTable id="SongTable" border="1" width="400"
value="#{ClientBean.catSongs}" var="song">
<h:column>
<f:facet name="header">
<h:outputText value="Titel" />
</f:facet>
<h:commandLink id="lnk1" action="#
{ClientBean.ShowDetails}"
value="#{song.titel}" />
</h:column>
</h:dataTable>
</h:form>
/////////////////////////////////////////////
Code von meiner ClientBean:
public List<SelectItem> 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<Song> 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

3 Antworten zu dieser Frage

  1. Antwort von nach einem Tag 0 hilfreich
    Re: Commandlink funktioniert nicht

    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.

    <rich:datatabel value="#{MyBean.List}" var="mySelection" rendered="#{MyListBean.WareIstAusgewehlt}" id="myTable" >
    <rich:column>
    <f:facet name="header">ProduktId</f:facet>
    <h:outputText value="#{mySelection.id}"/>
    </rich:column>
    <rich:column>
    <f:facet name="header">Name</f:facet>
    <h:outputText value="Produktname"/>
    </rich:column>
    <rich:column>
    <f:facet name="header">Action</f:facet>
    <s:link value="MyProductDetail" viewId="/Detailview.seam">
    <f:param name="productId" value="#{mySelecton.id"}/>
    </s:link>

    <rich:column>

    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 :-)

    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)

    • Antwort von nach 2 Tagen 0 hilfreich
      Re^2: Commandlink funktioniert nicht

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

      Vielen Dank für die ausführliche Antwort.

    • Antwort von nach 2 Tagen 0 hilfreich
      Re^2: Commandlink funktioniert nicht

      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

      Keine passende Antwort gefunden? Jetzt eigene Frage stellen!