2013-04-09 5 views
0

Я хочу настроить CDI в существующем приложении JSF 2-Websphere. Я использую CDI Conversional scope для сохранения состояния.Как получить доступ к CDI-компонентам в JSP-страницах

Я включил bean.xml в WEB-INF и аннотации в своем классе. Но все-таки я не смог получить доступ к компоненту CDI внутри JSP-страниц. Кто-нибудь может предоставить какие-либо образцы о том, как это сделать?

+0

Нужно ли добавлять любую папку внутри META-INF. – suganya

ответ

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) также рассказал нам, как

While JSR-299 не требует поддержки сервлет-среды, Weld может использоваться в сервлет-co ntainer, например Tomcat 6.0 или Jetty 6.1.

Weld может использоваться как библиотека в веб-приложении, которое развертывается в контейнере Servlet. Вы должны разместить weld-servlet.jar в каталоге WEB-INF/lib относительно корня веб-сайта. weld-servlet.jar - это «uber-jar», что означает, что для вашего удобства он связывает все бит Weld и CDI, необходимые для работы в контейнере Servlet. В качестве альтернативы вы можете использовать его компоненты. Список транзитивных зависимостей можно найти в файле META-INF/DEPENDENCIES.txt внутри артефакта weld-servlet.jar.

Во-первых, мы должны явно указать сервлета слушателя (используется для загрузки Weld, и контролировать его взаимодействие с запросами) в WEB-INF/web.xml в веб-корень:

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

Я надеюсь, что это может помочь.

+0

Благодарим за отзыв. Но я хочу, чтобы стандартная реализация CDI выполнялась в websphere. – suganya

0

Он отлично работает в WebSphere 8.5.5. Вам необходимо аннотировать класс с помощью @Named("yourName") и, как правило, с аннотацией, связанной с объемом.
Тогда вы можете получить доступ к компоненту в равнину, используя JSP EL так: ${yourName.property}

0

Ниже приведен пример используется аннотированный класс CDI @Named в JSP

класс:

@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 Фрагмент использовать этот класс

<%@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 аннотированные классы могут быть использованы в EL в JS P

Надеюсь, это вас удовлетворит. Pl. запросить какие-либо разъяснения

Смежные вопросы