2 Stimmen

wie man von einem jsf facelet umleiten, wenn ein el Ausdruck wahr ist?

Ich habe ein jsf-Facelet, das eine Zusammenfassung eines Suchvorgangs anzeigt. Nun möchte ich auf eine Detailseite weiterleiten, wenn nur ein Element von der Suchmaschine gefunden wurde. Ich möchte diese Umleitung nicht in meinen Beans implementieren, weil ich das "Wissen" über diese Umleitung aus meinem Java-Code heraus haben möchte.

Deshalb möchte ich so etwas schreiben:

<ui:redirect if="#{searchResult.count eq 1}" target="details.jsf">
   <f:param name="id" value="#{searchResult.firstResult.technicalId}" />
</ui:redirect>

Gibt es dafür Lösungen oder Ideen?

Ich weiß, es gibt Seite-Aktionen in JSF 2.2, aber ich bin mit JEE6 und es ist JSF 2.0 verfügbar. Btw. Ich verwende derzeit MyFaces, Primefaces und Richfaces.

Grüße.

1voto

BalusC Punkte 1034465

Sie sollten diese Aufgabe im Controller erledigen, nicht in der View.

Um Suchergebnisse zu erhalten, müssen Sie zunächst eine Aktionsmethode über ein Suchformular aufrufen, richtig? Erledigen Sie den Redirect-Job einfach direkt dort. Sie können JSF anweisen, einen Redirect zu senden, indem Sie die faces-redirect=true in der Abfragezeichenfolge des Aktionsergebnisses.

public String search() {
    results = service.find(query);

    if (results.size() == 1) {
        return "details?faces-redirect=true&id=" + results.get(0).getTechnicalId();
    }
    else {
        return "results";
    }
}

Oder wenn es sich um eine GET-Anfrage handelt, die von <f:event type="preRenderView"> dann tun Sie das:

public void onPreRenderViewListener() {
    results = service.find(query);

    if (results.size() == 1) {
        FacesContext.getCurrentInstance().getExternalContext().redirect("details.jsf?id=" + results.get(0).getTechnicalId());
    }
}

0voto

Oscar Castiblanco Punkte 1593

Ich würde sagen, der sauberste Weg ist, die Aktion in der Bean zu erzeugen. Auf jeden Fall würde ich Ihnen vorschlagen, einen Klick zu simulieren, wenn Ihre Suche Anzahl eq zu 1 mit Javascript ist.

benötigen Sie eine versteckte Eingabe, die die Anzahl enthält:

<h:inputHidden id="count" value="#{searchResult.count}" />

und eine versteckte Schaltfläche, um die Umleitung auszulösen:

<h:commandButton id="redirectButton" action="details.jsf" style="display: none;" />

Wenn Sie dann die Suche auslösen, aktualisieren Sie die Anzahl der Eingaben und bei Abschluss können Sie prüfen wenn der Wert der Zählung 1 ist, dann können Sie auf die commandButton klicken.

Wenn Sie Jquery verwenden, würde es etwa so aussehen

    if($("#count").val()==1){
        $("#redirectButton").click();
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X