2010-05-11 7 views
4

Je suis nouveau sur ejb. En fait, j'ai créé un ejb et j'ai ajouté une référence à une application web qui appellera le bean session simplement. Comment appeler le bean session à partir du fichier jsp?Comment appeler le bean session de jsp

Répondre

4

Je pourrais aussi vous préférer utiliser le modèle MVC pour votre application. Dans ce cas, il n'est pas nécessaire d'appeler un bean de session depuis le jsp, vous pouvez l'appeler depuis les servlets eux-mêmes.

Consultez ce lien pour appeler un EJB à partir d'une servlet. Click

+2

Il est très bien de dire que MVC est l'approche préférée, mais il y a quelques autres choses à considérer: Premièrement, une page JSP est convertie en servlet par le conteneur, de toute façon. Il n'y a donc rien de mal conceptuellement à accéder à un EJB dans une JSP. Deuxièmement, vous avez parfois besoin d'informations d'un EJB pour configurer la page. J'ai cette situation. J'ai besoin d'une liste de valeurs d'un EJB pour mettre en place une liste déroulante. Donc merci d'inclure la syntaxe correcte dans votre autre réponse. –

0

1) La première sera de créer un objet direct

utiliser un tag d'importation pour importer ur classe

< % @ page import = packageName.Classname %> 
    <% 
    @EJB 
    Classname object = new Classname(); 
    %> 

puis les méthodes d'accès à l'aide jsp normale

<%=object.callmethod()%> 

2) l'autre façon sera d'utiliser des actions standard

<jsp:useBean id="beanId' class="packagename.ClassName" /> 
<jsp:getStudentInfo name="beanId" property="name"/> 
+0

J'utilise package par défaut. Alors, comment puis-je mentionner le paquet. De plus, quand j'ai essayé de cette façon, je reçois l'erreur "Impossible de compiler la classe pour JSP". J'utilise netbeans ... – Nila

+0

@nila il n'est pas nécessaire d'utiliser l'option d'import de page si vous utilisez le même paquet. D'autres choses devraient bien fonctionner. – rgksugan

+1

Lors de la première étape si vous injectez l'EJB avec '@ EJB' et instanciez avec le nouveau Classname(). Cela n'a aucun sens parce que vous injectez et instanciez en même temps. Vous devriez supprimer '@ EJB' car il ne fait rien. –

0

Comme vous utilisez EJB à la couche de service et dans MVC, je ne les conseils d'appeler un bean session de votre point de vue ou jsp.you peut appeler la méthode beans de session par référence EJB d'injection en utilisant l'annotation @EJB.

2

J'ai essayé de faire cela sur Wildfly, mais sans succès en utilisant l'annotation @EJB, les JSP probabilistes n'ont pas de CDI. J'ai donc mis en œuvre sur une autre façon (pas si brillante):

Avant:

<% 
    LoginAction loginAction; 

    try { 
     Properties properties = new Properties(); 
     properties.put("jboss.naming.client.ejb.context", true); 
     properties.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming"); 
     Context ctx=new InitialContext(properties); 
     loginAction = (LoginAction) ctx.lookup("java:module/LoginAction"); 

     session.setAttribute("loginAction", loginAction); //this is to be able to use loginAction on EL Expressions! 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
%> 

Et tout le reste reste le même!

0

méthode jspInit de Simple..Override Jsp et créer un objet InitialContext .. objet InitialContext peut accéder à toutes les ressources qui ont le nom JNDI attribué ..

<%! 

BeanIntefaceName instanceName; 

%> 

<% 
public void jspInit() 
{ 
    instanceName = (BeanIntefaceName)new InitialContext().lookup("java:global/[application_name]/[module_name]/[enterprise_bean_name]/[inteface_name]"); 
} 

instanceName.yourMethodName(); 
%> 
0

Vous pouvez mélanger et assortir pour soutenir plusieurs serveurs d'applications dans le meilleur moyen. Le code ci-dessous utilise l'injection de @EJB pour WebSphere et la liberté InitialContext pour JBoss wildfly

<%! 

@EJB 
GitlabHelper gitAPI; 

public void jspInit() { 

    if (gitAPI == null) { 

    try { 
     gitAPI = (GitlabHelper) new InitialContext().lookup("java:module/GitlabHelper"); 
     System.out.println("<!-- initContext has been used -->"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 

%> 
Questions connexes