Salut tout le mode,
je voudrais savoir comment peut-on appeler une servlet depuis un Managed Bean dans une application web ?
Merci beaucoup.
Salut tout le mode,
je voudrais savoir comment peut-on appeler une servlet depuis un Managed Bean dans une application web ?
Merci beaucoup.
Salut,
précise un peu ton besoin.
Managed Bean ? JSF ?
Désolé d'être abrupte, mais ta question, c'est un peu comme si on demandait "comment faire des pates avec une clé à molette" ...![]()
oui effectivement,c'est le bean qu'on le déclare pour affecter à un bouton JSF(h:commandbutton) une des fonctions déclarée dans ce bean comme montre l'exemple suivant :
le bean ici c'est shoppingCartBean et la fonction déclarée checkout
Code : Sélectionner tout - Visualiser dans une fenêtre à part <h:commandButton id="button1" value="#{bundle.checkoutLabel}" action="#{shoppingCartBean.checkout}" />
mais mon problème ce que je ne sais pas comment appeler une servlet à partir d'un bean ,autrement, je voudrais quand l'utilisateur clique sur le bouton ,la fonction associée à ce dernier se déclenche pour exécuter quelques traitements et avant qu'elle s’achève elle donne la main à la servlet pour terminer la suite des traitement qui restent comme l'illustre ce schéma:
Page JSF -> commandButton -> bean -> servlet -> fin des traitements
j’espère que maintenant tout est clair .
Faites sortir votre logique buisness hors de la servlet, mettez là dans une méthode publique et appelez cette méthode publique. De même dans la servlet appelez cette méthode publiques.
Il n'y a qu'un raison pour laquelle on fait appel à une servlet: traiter un requete et générer une réponse. Deux roles qui n'ont rien à faire dans un managed bean en général.
Donc transformez ceci
Page JSF -> commandButton -> bean -> servlet -> fin des traitements
requete http -> servlet -> réponse
en ceci
Page JSF -> commandButton -> bean -> objet buisness -> traitement -> fin des traitements
requete http -> servlet -> objet buisness -> traitement -> réponse
tchize a raison, tu ne pourras pas appeler une servlet "tel quel" depuis l'action d'un bean, car tu "casserais" tout le concept JSF qui lui produit la réponse.
Il y aurait conflit en le HttpServletResponse de ta servlet et celui de JSF ...
donc c'est pas une bon idée.
tchize t'a donné l'architecture à même en place.
Bon courage !
Merci beaucoup pour vos réponses mais on pourra appeler une servlet depuis un bean comme ceci :
le bean appelant la servlet:
la page JSF qui contient le bouton :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import javax.faces.context.FacesContext; public class ServletTest { public void doThis(){ String url = "url de ta servlet"; FacesContext context = FacesContext.getCurrentInstance(); try { context.getExternalContext().dispatch(url); }catch (Exception e) { e.printStackTrace(); } finally{ context.responseComplete(); } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <f:view> <h:form id="myForm"> <h:commandButton value="Do" action="#{ServletTest.doThis}" /> </h:form> </f:view>
Partager