使用 CDI(上下文和依赖注入)支持bean而不是托管Bean



我认为建议使用CDI bean作为支持bean,而不是JSF托管bean。

所以我决定创建一个小例子,以了解它是如何工作的,为@RequestScopedBean:

使用<<p>,而strong> @ManagedBean (beanName) ,我使用 @ named (beanName)

-而不是使用javax.faces.bean。javax.enterprise.context. requestscope;

演示程序是非常简单的,我有一个字段和一个提交按钮,当用户输入一些东西,页面被刷新,输入的值不再显示(它持续而请求持续?)。我想我做的一切都很好,但我得到一个异常,说:

警告:StandardWrapperValve[面孔[Servlet]: PWC1406: Servlet.service()for servlet Faces servlet抛出异常javax.el.PropertyNotFoundException:/index.xhtml @19, 47岁value = " # {cdiBean。passedValue}":目标不可达,标识符'cdiBean'解析为null

我的程序是这样的:

index.xhtml

<!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:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">
<h:head>
        <title>RequestScope demo CDI(Component Dependency Injection)</title>
</h:head>
<h:body>
    <h:form>
    <h3>RequestScope demo CDI(Component Dependency Injection)</h3>
    <h:inputText value="#{cdiBean.passedValue}"/>
    <br/>
    <h:commandButton value="submit" action="index"/>
    </h:form>
</h:body>
</html>

DemoBB.java

package backingbeans;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named("cdiBean")//The Named anotation indicates that this is a CDI bean
@RequestScoped//If we use CDI beans the @RequestScoped annotation must come from: javax.enterprise.context.RequestScoped;
public class DemoBB {
    //This value will be saved on the session only until the server responds to the request
    private String passedValue;
    public String getPassedValue() {
        return passedValue;
    }
    public void setPassedValue(String passedValue) {
        this.passedValue = passedValue;
    }   
}

-我错在哪里?

-使用这种方法的优势是什么?我还是不明白。

您的web.xml中是否有空的beans.xml ?我认为必须去那里。

阅读15.6节。引用原文:

CDI没有定义任何特殊部署归档文件。你可以打包jar、ejb - jar或war - any中的bean应用程序中的部署位置类路径中。然而,档案必须做一个"bean档案"。这意味着每个存档必须包含bean包含一个名为beans.xml的文件类路径或的META-INF目录web根目录下的web - inf目录(for战争档案)。该文件可能为空。部署在归档中的bean不需要有一个beans.xml文件会不会可用于应用程序。

在可嵌入的EJB容器中,bean可以部署在任何地方可以部署哪些ejb。再一次。每个位置必须包含一个beans.xml文件文件。

相关内容

  • 没有找到相关文章