如何在JSP页面中访问CDI bean

时间:2013-04-09 07:00:37

标签: jsp cdi

我想在现有的JSF 2-Websphere应用程序中设置CDI。我正在使用CDI Conversional范围进行状态保存。

我在我的类中包含了WEB-INF和注释中的bean.xml。但是我仍然无法访问JSP页面中的CDI bean。任何人都提供了如何完成这些操作的样本吗?

3 个答案:

答案 0 :(得分:1)

Weld home page mentions

  

对于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