Java JSF看不到带注释的Bean
我尝试制作一个简单的JSF示例,并有几个文件管理器。我使用Maven,并存储在META-INF FLOLDEFACES-confid.xml中 在尝试执行时的输出中,我看到: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;
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问题。