2010-05-11 80 views
4

我是ejb的新手。其實我已經創建了一個ejb,並且添加了一個可以簡單調用會話bean的Web應用程序的引用。如何從jsp文件調用會話bean?如何從jsp調用會話bean

回答

4

我也可以更喜歡你爲你的應用程序使用MVC模型。在這種情況下,不需要從jsp調用會話bean,您可以從servlet本身調用它。

查看此鏈接從servlet調用EJB。 Click

+2

儘管MVC是首選方法,但還有其他一些事情需要考慮:首先,無論如何,JSP頁面被容器轉換爲servlet。因此,在JSP中訪問EJB沒有任何概念錯誤。其次,有時您需要來自EJB的信息來設置頁面。我有這種情況。我需要一個來自EJB的值列表來設置一個下拉列表。非常感謝您在其他答案中包含正確的語法。 – 2014-10-28 15:08:19

0

1)第一種方式是創建一個直接對象

使用導入標記中使用正常的jsp

<%=object.callmethod()%> 

2導入烏爾類

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

然後訪問方法)另一種方式是使用標準動作

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

我使用的是默認的包。那麼,我怎麼能提到這個軟件包。此外,當我嘗試這種方式時,我得到錯誤爲「無法編譯JSP類」。我正在使用netbeans ... – Nila 2010-05-11 08:36:08

+0

@nila 如果您使用相同的包,則無需使用頁面導入選項。 其他的東西應該可以正常工作。 – rgksugan 2010-05-11 09:03:16

+1

第一步如果用'@ EJB'注入ejb並用新的Classname()實例化。這是沒有意義的,因爲你在同一時間注入和實例化。你應該刪除'@ EJB'因爲它沒有做任何事情。 – 2016-05-10 17:25:41

0

當你正在使用EJB的服務層和MVC中,我絕不會建議您查看呼叫會話bean或jsp.you可以使用@EJB註解通過注射EJB引用調用會話bean方法。

2

我試過在蜻蜓上做到這一點,但沒有成功使用@EJB註釋,可能JSP沒有CDI。所以,我已經實現了它的另一種方式(不那麼亮):

之前:

<% 
    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(); 
    } 
%> 

和所有其餘保持不變!

0

Simple..Override JSP的jspInit方法,並創建InitialContext對象.. InitialContext對象可以訪問所有具有JNDI名稱分配的資源..

<%! 

BeanIntefaceName instanceName; 

%> 

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

instanceName.yourMethodName(); 
%> 
0

你可以混合和匹配,以支持多個應用服務器最好的辦法。 下面的代碼使用@EJB注入了WebSphere自由和InitialContext的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(); 
    } 
    } 
} 

%>