我尝试制作简单的 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/