我是ejb的新手。实际上我已经创建了一个ejb,我添加了一个Web应用程序的引用,它将简单地调用会话bean。如何从jsp文件中调用会话bean?
答案 0 :(得分:4)
我也希望您将MVC模型用于您的应用程序。在这种情况下,不需要从jsp调用会话bean,你可以从servlet本身调用它。
查看此链接以从servlet调用EJB。 Click
答案 1 :(得分:2)
我试图在Wildfly上做到这一点,但是使用@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();
}
%>
其余的都保持不变!
答案 2 :(得分:0)
1)第一种方法是创建直接对象
使用import标签导入你的课程
< % @ page import = packageName.Classname %>
<%
@EJB
Classname object = new Classname();
%>
然后使用普通的jsp访问方法
<%=object.callmethod()%>
2)另一种方式是使用标准动作
<jsp:useBean id="beanId' class="packagename.ClassName" />
<jsp:getStudentInfo name="beanId" property="name"/>
答案 3 :(得分:0)
当你在服务层和MVC中使用EJB时,我永远不会建议从你的视图或jsp调用会话bean。你可以通过使用@EJB注释注入EJB引用来调用会话bean方法。
答案 4 :(得分: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();
%>
答案 5 :(得分:0)
您可以以最佳方式混合搭配以支持多个应用程序服务器。 下面的代码使用WebSphere Liberty的@EJB注入和JBoss Wildfly的InitialContext
<%!
@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();
}
}
}
%>