0

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

我已经在 WEB-INF 中包含了 bean.xml,并在我的类中包含了注释。但是我仍然无法访问 JSP 页面中的 CDI bean。任何人都可以提供有关如何完成此操作的任何示例吗?

4

3 回答 3

1

Weld主页提到

对于 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.3Servlet 容器(例如 Tomcat 或 Jetty)也告诉我们

虽然 JSR-299 不需要支持 servlet 环境,但 Weld 可以在 servlet 容器中使用,例如 Tomcat 6.0 或 Jetty 6.1。

Weld 可用作部署到 Servlet 容器的 Web 应用程序中的库。您应该放置weld-servlet.jarWEB-INF/lib相对于 Web 根目录的目录中。weld-servlet.jar是一个"uber-jar",这意味着它捆绑了在 Servlet 容器中运行所需的所有 Weld 和 CDI 位,以方便您使用。或者,您可以使用它的组件 jar。可以在工件META-INF/DEPENDENCIES.txt内的文件中找到传递依赖项的列表。weld-servlet.jar

WEB-INF/web.xml首先,我们还需要在 web 根目录中显式指定 servlet 侦听器(用于启动 Weld,并控制其与请求的交互) :

<listener>
   <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>

我希望这可能会有所帮助。

于 2013-04-09T09:02:39.210 回答
1

它在 WebSphere 8.5.5 中运行良好。您需要使用@Named("yourName")并且通常使用一些与范围相关的注释来注释类。
然后你可以像这样使用 EL 在纯 jsp 中访问你的 bean:${yourName.property}

于 2014-08-26T18:52:02.883 回答
1

以下是在 JSP 中使用 CDI @Named 注释类的示例

班级 :

@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;
    }


}

现在 JSP Fragment 使用这个类

 <%@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>

这个 @Named 注解的类可以在 JSP 中的 EL 中使用

希望这能让你满意。PL。要求任何澄清

于 2018-02-03T07:39:02.747 回答