我尝试制作简单的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>
答案 0 :(得分:2)
在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容器(您can但是单独安装它;注意,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上接受。另见例如How can I initialize a Java FacesServlet
答案 1 :(得分:0)
使用其他注释修复
@ManagedBean(name = "test", eager = true)
@RequestScoped