在cdi上@named的问题

时间:2015-04-19 18:24:42

标签: jsf cdi named

每个人的下午都好,我坚持以下问题......

我必须在项目中使用jsf和cdi,我已经看到当我使用cdi时我应该使用@named而不是@ManagedBean,但是当我更改它时,浏览器上不再显示该消息。

现在只是一个测试,所以它没有复杂的代码和东西。

这是我的索引:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <title>Hello JSF!</title>
</h:head>
<h:body>
    <h:outputText value="#{teste.message}" />
</h:body>
</html>

这是我的豆子:

package jsfConnection;

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named("teste")
@RequestScoped
public class Teste {
    public String getMessage() {
        return "ola";
    }

}

的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">

    <description>Patrimônio web.xml</description>
    <!-- Nome da sua aplicação -->
<display-name>Patrimônio</display-name>
<!-- Faces Servlet -->

<!-- Configuração do arquivo inicial quando a aplicação for inicializada -->
<welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsf</welcome-file>
</welcome-file-list>

<!-- Configuração do Controlador Faces Servlet -->
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

当我使用@ManagedBean时它正常显示但是当我切换到@Named时它根本不打印任何东西......

2 个答案:

答案 0 :(得分:1)

这是“How to install and use CDI on Tomcat?”的副本。请注意,我试图在我的博客上做一些详细的说明:“Enabling JSF 2.2 and CDI 1.2 on Tomcat 8”。这些说明也适用于Tomcat 7,虽然我没有测试。我也可能会注意到你可能最好使用一个已经附带CDI和JSF实现的TomEE版本。

有关更多详细信息,请参阅Blog,但在Tomcat上设置所有内容需要2个主要步骤:

  • 将正确的providedruntime库定义为maven依赖项
  • 配置和引导CDI实施(焊接)。

使用以下3个文件设置引导:

  • WEB-INF/web.xml
  • WEB-INF/beans.xml
  • META-INF/context.xml - 此META-INF目录可以在webapp根目录下找到,也可以在找到WEB-INF的相同位置找到。

另请注意,作为web.xml文件的一部分,您可以定义请求(URL)如何映射到物理位置(路径)。 Faces Servlet的<servlet-mapping>,可以作为路径前缀,也可以作为扩展名:<url-pattern>/faces/*</url-pattern> vs <url-pattern>*.xhtml</url-pattern>

答案 1 :(得分:0)

Tomcat不是Java EE服务器,因此CDI无法开箱即用。要在其中使用CDI,您需要1)包含CDI实现,2)在web.xml中配置它。

有关详细信息,请参阅CDI实施文档(Weld或OpenWebBeans)。