JSF 2 - Anzeigen Parameter-Validierung und-Umleitung

Sind wir mit JSF 2 + Primefaces + Glassfish + CDI/WELD für die Entwicklung.
Wir haben ein datalist - /dataTable-Buch Angebote auf unserer Suche.xhtml-Seite, die jeweils so dargestellt, als einen outputLink. Auf Klick auf einen Eintrag Ansicht.xhtml angezeigt wird, mit all den Buch-details. Dies ist der code, der in unserer Suche.xhtml, die aufgerufen wird:

<h:outputLink value="${request.contextPath}/viewBook.xhtml?id=${book.id}">${book.title} 
</h:outputLink> 

In der viewBook.xhtml, basierend auf dem Buch-Id an die URL übergeben, die details sind aufgefüllt, die vor dem Rendern der Seite wie folgt:

<f:metadata>
    <f:viewParam name="id" value="#{bookBean.id}"/>     
        </f:viewParam>
    <f:event type="preRenderView" listener="#{bookBean.populate}" />
</f:metadata>

Unsere Anforderung ist zu überprüfen die Id vor dem Rendern der Seite und, wenn nicht in unserer DB ist, müssen wir umleiten auf eine Fehlerseite oder zeigen die Fehler msg auf der gleichen Seite, d.h. der Seite suchen

Versuchten wir überprüfen die Buch-Id in zwei verschiedenen Arten:
1. Mit der Validierung in den füllen-Methode wie folgt

if (bookFound)
{
    //Display details
}
else
{
    FacesContext fc = FacesContext.getCurrentInstance();
    fc.addMessage("id", new FacesMessage("No such book found in the system. Please try again."));
    fc.renderResponse();
}
  1. Durch Einhaken eine benutzerdefinierte validator-in den Blick.xhtml und warf einen validator Ausnahme (Flächen-Nachricht) auf dem Bildschirm. Wir nutzen CDI-SCHWEIßEN, so dass wir verwenden können-Injektion.

    <f:metadata>
        <f:viewParam name="id" value="#{bookBean.id}"/>
       <f:validator validatorId="bookIdValidator"/>
        </f:viewParam>
        <f:event type="preRenderView" listener="#{bookBean.populate}" />
    </f:metadata>

Diese beiden Ansätze funktionieren, sondern Sie zeigen die Fehler auf dem Bildschirm, nicht die Suche-Bildschirm. Es ist möglich, umleiten auf eine Fehlerseite mit dem code:

FacesContext.getCurrentInstance().getExternalContext().redirect("/error.xhtml");
  1. Ist es ein Weg zur Abwicklung der Validierung, so dass die Fehlermeldungen angezeigt werden auf der Seite suchen, wo die outputLink geklickt wird. Wir verstehen, dass wir brauchen, um zu behandeln, die Validierung auf der Suche Seite, aber wie kann man assoziieren ein validator mit dem h:outputLink. Kann man mit h:link alternativ (Wir verwenden müssen, um GET-Anfragen nicht POSTEN..so mit ein commmandLink oder-Taste ist nicht möglich)
  2. Gibt es eine bessere Möglichkeit die Umleitung auf eine Fehlerseite, als wir es tun.

    (FacesContext.getCurrentInstance().getExternalContext().redirect("/Fehler.xhtml");)

Alle Zeiger wäre sehr dankbar.

Dank und Grüße

InformationsquelleAutor gkari | 2011-06-02
Schreibe einen Kommentar