您对JSF项目中的CDI功能需要什么?

时间:2012-10-15 13:44:05

标签: java jsf-2 websphere java-ee-6 cdi

我有一个针对WebSphere Application Server 8的JSF项目,我尝试使用CDI概念。我有/WEB-INF/beans.xml喜欢:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee " title="http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">" class="link">http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> (http://java.sun.com/xml/ns/javaee/beans_1_0.xsd)
</beans>

这是我的托管bean:

@ConversationScoped
@Named("systemParameter")
public class SystemParameter implements Serializable {

    @EJB
    private ConfigFacade parameterFacade;

以下是Xhtml页面的摘录:

<h:commandButton action="#{systemParameter.doSave}"/>

如果我尝试点击按钮,我会收到以下异常。

javax.el.PropertyNotFoundException: /systemParameters.xhtml at line 99 and column 99 action="#{systemParameter.doSave}": Target Unreachable, identifier 'systemParameter' resolved to null

我还需要什么?

3 个答案:

答案 0 :(得分:1)

在WAS 8.x上,确保使用Apache MyFaces 2.x实现来实现EJB的依赖注入(以及CDI)。

答案 1 :(得分:0)

其实第二个想法我至少可以分享一个片段,可能会帮助你找出错误的内容。

使用以下

@PostConstruct
private void test() {
    Bean<?> bean = (Bean) manager.resolve(manager.getBeans("systemParameter"));
        System.out.println(bean);

}

现在如果经理打印出null你可能有问题。尝试调试,

在println上放置一个断点并检查管理器获取的bean数量。在Eclipse hover manager中点击bean,检查底层数组,它有多大?报告回来。

答案 2 :(得分:0)

我相信你应该使用

@Inject
private ConfigFacade parameterFacade

而不是@EJB注释将会话bean注入Web控制器