繁体   English   中英

JSF没有看到带注释的Bean

[英]JSF not see annotated Bean

我尝试制作简单的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 (上下文和依赖注入),这是一种管理bean的Java EE标准化方法(旨在标准化/取代其他Spring DI和AOP)。 这仅适用于支持Java EE Web配置文件的容器,如Glassfish,JBoss AS等,但不适用于Tomcat和Jetty等准系统servlet容器(但您可以单独安装;注意,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

来自JSF本身。 如果您打算让Web应用程序在各种容器中可移植,包括Tomcat和Jetty等准系统JSP / Servlet容器,这将特别有用。 它们不需要任何其他配置文件即可运行。

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

通过使用其他anotation修复

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM