[JSF] Peut-on executer du code java avant d'appeler la jsp ?

Peut-on executer du code java avant d'appeler la jsp ? [JSF] - Java - Programmation

Marsh Posté le 08-09-2008 à 16:33:26    

Bonjour,
 
je débute complètement avec jsf mais je me pose une question très simple : Peut-on accéder à un ManagedBean avant d'exécuter la jsp ?
 
Je m'explique, j'ai fait une page mapage1.jsp qui contient quelques trucs dont le lien suivant :

Code :
  1. <h:commandLink action="#{monManagedBean.lien2}">
  2.    <h:outputText value="lien2">
  3. </h:commandLink>


 
lorsque je click sur ce lien j'arrive dans la méthode lien2() du managedBean monManagedBean.
 

Code :
  1. public String lien2()
  2. {
  3.   //traitement java pour récupérer une liste en BDD et la mettre en request
  4.   return "mapage2";
  5. }


 
 
Cette méthode effectue un traitement genre un appel à la BDD pour récupérer une liste et mettre cette liste en request. Puis elle retourne la chaine de caractère "mapage2".
 
d'après ce qui est indiqué dans mon faces-config, la page mapage2.jsp va être affiché à l'écran :

Code :
  1. <navigation-rule>
  2.   <from-view-id>/jsp/mapage1.jsp</from-view-id>
  3.   <navigation-case>
  4.      <from-outcome>mapage2</from-outcome>
  5.      <to-view-id>/jsp/mapage2.jsp</to-view-id>
  6.   </navigation-case>
  7. </navigation-rule>


 
dans mapage2.jsp je vais pouvoir récupérer la liste présente en request et l'afficher.
 
 
Voilà quand j'appelle l'url http://localhost:8080/learn/jsp/mapage1.faces je tombe sur ma page avec mon lien et lorsque je click dessus j'arrive bien sur mapage2 avec ma liste récupérée en BDD.
 
Jusque là ça va. Mon problème est que je voudrais accéder directement à mapage2 (et donc passer par le managedBean qui appel la BDD) sans passer par mapage1. Est-ce possible ? et comment dois-je faire ?
 
J'espère avoir été clair dans ma demande (je peux préciser si besoin).
 
Merci à ceux qui voudront bien m'éclairer.
 
lipao

Reply

Marsh Posté le 08-09-2008 à 16:33:26   

Reply

Marsh Posté le 09-09-2008 à 11:50:20    

Si tu mets l'appel au sgbd dans le constructeur de ta classe ca initialisera ta liste au premier appel de ta page.

Reply

Marsh Posté le 09-09-2008 à 13:54:20    

j'y connais rien en JSF, mais si c'est ça la solution, je veux rien savoir de plus sur cette techno...


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 09-09-2008 à 14:13:05    

j'ai pas dit que c'était propre comme solution :o

 

edit : on peut aussi mettre en place un filtre qui lancera une fonction init() pour charger la liste ou faire une classe contenant la classe au-dessus et qui gèrera sa vie...

 

mais bon JSF y a pas mal de truc naze des fois avec leur cycle de vie relou.


Message édité par jan san kar le 09-09-2008 à 14:15:47
Reply

Marsh Posté le 18-09-2008 à 14:16:57    

une solution avec le phase lisneter
 
etend la classe phaseListener de JSF, un exemple  ici
 
ensuite dans la methode afterPhase
 

Code :
  1. HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
  2. if (phaseid == PhaseId.RESTORE_VIEW || phaseid == PhaseId.INVOKE_APPLICATION) {
  3. String viewId = context.getViewRoot().getViewId();
  4. if (viewId != null && "bouchon.faces".equals(viewId)) {
  5. //traitement test et redirection
  6. try {
  7. response.sendRedirect("page1.faces" );
  8. } catch (IOException e1) {
  9. }
  10. }


 
et j'ai plus qu'à appeler ma page à l'adresse : http://localhost:8080/learn/jsp/mapage1.faces
 
pas super propre mais ça marche
 
Merci à vous, à Sniper37 et à romaintaz
A+  
 
 
lipao


Message édité par lipao le 18-09-2008 à 14:19:07
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed