2017-05-19 1 views
1

Je suis bloqué avec une redirection jsf via un ejb et je passe une journée à trouver le problème sans trouver le problème.Redirection via actionListener ne fonctionne pas

Je souhaite exécuter une action dans un EJB et, selon le résultat, rediriger l'utilisateur vers une autre page. Je suis sûr que la fonction fonctionne sans erreur, je suis les résultats en mode debug.

J'ai déjà fait la redirection de la même manière dans d'autres projets mais ça ne marche pas ici, pour être sûr, j'ai créé une fonction très basique où j'ai le même problème.

Juste pour tester la fonction que j'ai fait un ejb test:

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

et où je tente d'utiliser la fonction:

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

Ceci est la configuration web.xml:

<?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> 

Je regarde dans le fichier journal et ma fonction fonctionne sans erreur, mais où je devrais être rediriger vers la page d'index l'applicat l'ion reste sur la page.

Quelqu'un pourrait-il aider?

+2

Pouvez-vous essayer d'appeler la méthode de redirection de « action » au lieu de « actionListener »? – Bonifacio

+0

@Kukeltje Eh oui c'est ce que je fais comme je suis étudiant. Les novices ne sont pas les bienvenus? Retour "login.xhtml" n'est pas la redirection? Je me demande si c'était une redirection implicite selon ce https://maxkatz.org/2009/09/18/learning-jsf2-navigation/. J'ai fait une comparaison – Ersch

+0

@Bonifacio J'ai essayé mais le même problème – Ersch

Répondre

1

Le composant p:commandButton ne prend pas en charge la redirection d'action à l'aide d'une simple chaîne sans y attacher explicitement un paramètre de redirection.

Si vous souhaitez effectuer une redirection à l'aide de l'action, vous devez inclure faces-redirect=true comme paramètre d'URL dans votre chaîne.

Changer votre code un peu devrait faire l'affaire:

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

Je suis d'accord que OP n'utilise pas la manière la plus correcte de le faire, mais de l'autre côté si nous insistons toujours que le plus correct les modèles doivent être suivis, nous finirions par créer trop de complexité et beaucoup plus grande courbe d'apprentissage pour les débutants. Je ne dis pas que nous devrions fermer les yeux sur cela, mais parfois une solution facile peut aider beaucoup plus qu'un tutoriel complexe. – Bonifacio

+0

Je ne suis pas en désaccord, C'est pourquoi j'ai déclaré 'hors-sujet' ;-) pour le tutoriel, mais effectivement ce n'est pas entièrement correct puisque ce que vous dites dans la première ligne n'est pas 'p: commandButton' mais pour un' h: commandButton' à. Et pour un 'p \ h: commandLink' à et plus. Et en faisant référence aux «doublons», il y a souvent plus d'informations et les affiches peuvent apprendre au lieu de fournir la solution (fournir du poisson au lieu d'apprendre à réparer). (voir le duplicata J'ai marqué cette question comme) – Kukeltje

+1

Merci pour votre aide, cela fonctionne maintenant en changeant l'action et en ajoutant? faces-redirect = true. Je suis d'accord que la terminologie peut être mieux mais mettre que sur l'anglais n'est pas ma mère lang – Ersch