2017-05-19 6 views
1

Ich bin mit einer jsf Umleitung über einen ejb fest und ich verbrachte einen Tag, um das Problem zu finden, ohne das Problem zu finden.Umleitung über actionListener funktioniert nicht

Ich möchte eine Aktion in einem EJB ausführen und je nach Ergebnis den Benutzer auf eine andere Seite umleiten. Ich bin sicher, dass die Funktion ohne Fehler funktioniert, ich folge den Ergebnissen im Debug-Modus.

Ich habe bereits die Umleitung auf die gleiche Weise in anderen Projekten durchgeführt, aber es funktioniert hier nicht, in ordre um sicher zu sein, ich habe eine sehr grundlegende Funktion erstellt, wo ich das gleiche Problem habe.

nur die Funktion testen ich einen Test ejb tat

@Named 
@SessionScoped 
public class testController implements Serializable{ 
    public String redirection(){ 
     return "login.xhtml"; 
    } 
} 

und das, wo ich versuche, die fonction zu verwenden:

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:p="http://primefaces.org/ui"> 

    <h:head> 
     <f:facet name="first"> 
      <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/> 
      <meta name="apple-mobile-web-app-capable" content="yes" /> 
     </f:facet> 
     <title>PrimeFaces Omega</title> 
    </h:head> 

    <h:body styleClass="login-body"> 
     <p:commandButton value="test" actionListener="#{testController.redirection()}"/> 
     </h:body> 
</html> 

Dies ist die web.xml config:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <welcome-file-list> 
     <welcome-file>login.xhtml</welcome-file> 
    </welcome-file-list> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 
    <!-- JSF mapping --> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <!-- Map these files with JSF --> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.jsf</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.faces</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 
    <context-param> 
     <param-name>primefaces.THEME</param-name> 
     <param-value>omega</param-value> 
    </context-param> 
    <context-param> 
     <param-name>primefaces.FONT_AWESOME</param-name> 
     <param-value>true</param-value> 
    </context-param> 
    <mime-mapping> 
     <extension>ttf</extension> 
     <mime-type>application/font-sfnt</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>woff</extension> 
     <mime-type>application/font-woff</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>woff2</extension> 
     <mime-type>application/font-woff2</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>eot</extension> 
     <mime-type>application/vnd.ms-fontobject</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>eot?#iefix</extension> 
     <mime-type>application/vnd.ms-fontobject</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg#exosemibold</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg#exobolditalic</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg#exomedium</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg#exoregular</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>svg#fontawesomeregular</extension> 
     <mime-type>image/svg+xml</mime-type> 
    </mime-mapping> 
</web-app> 

Ich schaue in die Log-Datei und meine Funktion funktioniert ohne Fehler, aber wo ich auf die Indexseite der Applicat umleiten sollte Ion bleibt auf der Seite.

Jemand könnte helfen?

+2

Können Sie versuchen, aus der Umleitungsmethode zu nennen „Aktion“ statt „Action“? – Bonifacio

+0

@Kukeltje yep es ist was ich mache, als ich ein Student bin. Novize sind nicht willkommen? Rückgabe "login.xhtml" ist keine Umleitung? Ich frage mich, ob es eine implizite Weiterleitung nach dieser https://maxkatz.org/2009/09/18/learning-jsf2-navigation/ war. Ich habe einen Vergleich – Ersch

+0

@Bonifacio Ich versuchte, aber das gleiche Problem – Ersch

Antwort

1

Die Komponente p:commandButton unterstützt keine Aktionsweiterleitung, die nur einen einfachen String verwendet, ohne explizit einen Redirect-Parameter damit zu verbinden.

Wenn Sie mit der Aktion umleiten möchten, müssen Sie faces-redirect=true als URL-Parameter in Ihre Zeichenfolge einfügen.

Ändern Sie den Code ein bisschen sollte es tun:

public String redirection(){ 
    return "login.xhtml?faces-redirect=true"; 
} 
+0

Ich stimme zu, dass OP nicht die korrekteste Methode verwendet, um dies zu tun, aber auf der anderen Seite, wenn wir immer die korrekteste erzwingen Muster müssen befolgt werden, wir würden am Ende schaffen zu viel Komplexität und weit größere Lernkurve für Anfänger. Ich sage nicht, dass wir hier ein Auge zudrücken sollten, aber manchmal kann eine einfache Lösung viel mehr als ein komplexes Tutorial helfen. – Bonifacio

+0

Ich stimme nicht zu, deshalb habe ich 'off-topic' angegeben ;-) für das Tutorial, aber effektiv ist es nicht völlig richtig, da das, was Sie in der ersten Zeile angeben, nicht 'p: commandButton' ist, sondern für ein' h: commandButton' zu. Und für einen 'p \ h: commandLink' zu und mehr. Und durch den Verweis auf "Duplikate" gibt es oft mehr Informationen und Poster können lernen, anstatt mit der Lösung versorgt zu werden (indem man Fisch bereitstellt, anstatt zu lernen, wie man es repariert). (Siehe das Duplikat, dass ich diese Frage als markiert habe) – Kukeltje

+1

Danke für Ihre Hilfe, es funktioniert jetzt, indem Sie die Aktion ändern und hinzufügen? faces-redirect = true. Ich stimme zu, dass die Terminologie besser sein kann, aber setzen Sie das auf Englisch ist nicht meine Mutter lang – Ersch

Verwandte Themen