Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF看不到带注释的Bean_Java_Jsf 2_Annotations - Fatal编程技术网

Java JSF看不到带注释的Bean

Java JSF看不到带注释的Bean,java,jsf-2,annotations,Java,Jsf 2,Annotations,我尝试制作一个简单的JSF示例,并有几个文件管理器。我使用Maven,并存储在META-INF FLOLDEFACES-confid.xml中 在尝试执行时的输出中,我看到: Welcome to JSF. 但它必须是: Welcome to JSF. test 这是: Bean文件 import java.io.Serializable; import javax.enterprise.context.RequestScoped; import javax.inject.Named;

我尝试制作一个简单的JSF示例,并有几个文件管理器。我使用Maven,并存储在META-INF FLOLDEFACES-confid.xml中

在尝试执行时的输出中,我看到:

Welcome to JSF. 
但它必须是:

Welcome to JSF. test
这是:

Bean文件

import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;


@Named("test")
@RequestScoped
public class TestBean implements Serializable{
    private String test = "test";

    public String getTest() {
        return test;
    }

    public void setTest(String test) {
        this.test = test;
    }    
}
XHTML文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Welcome</title>
    </h:head>
    <h:body>
        <h3>Welcome to JSF. #{test.test}</h3>
    </h:body>
</html>

欢迎
欢迎来到JSF#{test.test}

通过使用其他方法修复

@ManagedBean(name = "test", eager = true)
@RequestScoped

在JavaEE/JSFWeb应用程序中,基本上有两个API可用于管理bean

就像你最初的问题一样

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

@Named("test")
@RequestScoped
来自(上下文和依赖项注入),这是一种JavaEE标准化的bean管理方式(旨在标准化/替代SpringDI和AOP)。这仅在支持JavaEEWeb概要文件的容器中可用,如Glassfish、JBossAS等,但在基本的servlet容器中不可用,如Tomcat和Jetty(您可以单独安装它;注意,Weld是CDI的参考实现,就像Mojarra是JSF的参考实现一样)

为了让CDI运行,您需要在webapp中有一个物理
/WEB-INF/beans.xml
文件。文件本身可以保持为空。你最初的问题表明你没有。如果缺少此文件,则不会初始化webapp的CDI,从而加快服务器启动时间

另一方面,正如你在自己的回答中所想

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean("test")
@RequestScoped
它们来自于自身。如果您想让web应用程序在各种容器(包括基本JSP/Servlet容器,如Tomcat和Jetty)之间保持可移植性,这将特别有用。它们不需要任何额外的配置文件才能运行


应该注意的是,
eager=true
在请求范围的bean上是不必要的。更重要的是,它无论如何都会被忽略。它只在应用程序范围的bean上被接受。另请参见例如:

可能重复的@Ravi:不完全相同。在最初的问题中,
#{test.test}
看起来很普通。在当前的问题中,它看起来是一个空字符串。我将项目中的依赖项从jsf 2.2.x更改为jsf 2.1.0,现在它不再工作,我可以理解为什么。重新启动我的笔记本电脑,它再次工作,我什么都看不懂。它显然没有正确构建或部署。这是一个工具问题,而不是JSF问题。