我想在现有的JSF 2-Websphere应用程序中设置CDI。我正在使用CDI Conversional范围进行状态保存。
我在我的类中包含了WEB-INF和注释中的bean.xml。但是我仍然无法访问JSP页面中的CDI bean。任何人都提供了如何完成这些操作的样本吗?
答案 0 :(得分:1)
对于Servlet容器(Tomcat / Jetty)或Java EE 5应用程序服务器:
<dependency>
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet</artifactId>
<version>1.1.10.Final</version>
</dependency>
18.3. Servlet containers (such as Tomcat or Jetty)也告诉我们
虽然JSR-299不需要支持servlet环境,但可以在servlet容器中使用Weld,例如Tomcat 6.0或Jetty 6.1。
Weld可以用作部署到Servlet容器的Web应用程序中的库。您应该将
weld-servlet.jar
放在相对于Web根目录的WEB-INF/lib
目录中。weld-servlet.jar
是“uber-jar”,这意味着为了方便起见,它捆绑了在Servlet容器中运行所需的所有Weld和CDI位。或者,您可以使用其组件罐。可以在META-INF/DEPENDENCIES.txt
工件内的weld-servlet.jar
文件中找到传递依赖项列表。
首先,我们还需要在Web根目录的WEB-INF/web.xml
中显式指定servlet侦听器(用于引导Weld,并控制其与请求的交互):
<listener>
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
我希望这可能有所帮助。
答案 1 :(得分:0)
它在WebSphere 8.5.5中运行良好。您需要使用@Named("yourName")
注释类,并且通常使用与范围相关的注释
然后,您可以使用EL访问普通jsp中的bean,如下所示:${yourName.property}
答案 2 :(得分:0)
Following is an example to used an CDI @Named annotated class in JSP
class :
@RequestScoped
@Named(value = "emp")
public class Employee {
int empno;
String ename;
double salary;
public Employee() {
this.ename="Shankar";
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
Now the JSP Fragment to use this class
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<NoAutoGeneratedIdViewHandlertitle>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
${emp.ename}
</body>
</html>
This @Named annotated classes can be used in EL in JSP
Hope this satisfies you. Pl. ask for any clarification