java - JSF 看不到带注释的 Bean

标签 java jsf-2 annotations

我尝试制作简单的 JSF 示例并有几个文件管理器。我使用Maven,并存储在META-INF flolder faces-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>

最佳答案

在 Java EE/JSF Web 应用程序中,基本上有 2 个 API 可用于管理您的 Bean。

那些,就像你最初的问题一样,

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

@Named("test")
@RequestScoped

来自CDI (上下文和依赖注入(inject))这是管理 bean 的 Java EE 标准化方法(旨在标准化/取代 Spring DI 和 AOP)。这仅在支持 Java EE Web 配置文件的容器中可用,例如 Glassfish、JBoss AS 等,但在 Tomcat 和 Jetty 等准系统 Servlet 容器中不可用(您can 但是单独安装它;注意,Weld 是 CDI 的引用实现,就像 Mojarra 是 JSF 的引用实现一样)。

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

另一种方式,正如您在自己的答案中所想到的那样,

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

@ManagedBean("test")
@RequestScoped

来自JSF本身。如果您打算使 Web 应用程序在各种容器(包括 Tomcat 和 Jetty 等准系统 JSP/Servlet 容器)之间保持可移植性,这将特别有用。它们不需要任何额外的配置文件即可运行。

值得注意的是,eager=true 在请求范围的 bean 上是不必要的。更何况,无论如何都会被忽视。它仅在应用程序范围的 bean 上被接受。另请参见例如How can I initialize a Java FacesServlet .

关于java - JSF 看不到带注释的 Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14526560/

相关文章:

java - 看点在多个类中创建内部类型方法

java - 如何从此 XML 文件中检索多个属性值 - 使用 SimpleXML/Android

spring - 如何使用spring mvc使用@RequestParam捕获多个参数?

官方文档中的Java注解示例

java - SVN 提交行为/失败标准

java - 获取调查问卷 JSF 的结果

jsf-2 - Primefaces DialogFramework - 如何显示位于 WEB-INF 中的对话框?

eclipse - 无法在 Eclipse-Indigo/Tomcat7 中运行 jsf2 项目

php - Symfony2 : Doctrine does not load related entities in many-to-many relation

Java 似乎忽略了 -Xms 和 -Xmx 选项