JSF应用在Eclipse、WildFly和 Jakarta Faces环境下无法运行
我找不到我的程序为何不工作的原因。我可以在带javax.faces 2.3.8的老版本Tomcat上让它工作。现在我尝试在最新版Eclipse 2026-03(配合JBoss Tools)、从Eclipse内部下载的WildFly 37.0.1服务器以及Jakarta Faces(WildFly的实现)环境中让它工作。没有额外的Java JDK/JRE,只有Eclipse自带的那个。我在Ubuntu 24.04.3桌面版上工作。
我创建了一个模板和一个index.xhtml页面,尝试使用我创建的UserBean。索引网页显示正常,但Bean无法工作。因此除了Bean信息不显示之外,一切看起来都正常。我还注意到在输入#{…} 数据时,没有任何帮助提示。
引用的库:PrimeFaces 15.0.15,但在此测试中并未使用。我也尝试过在不带PrimeFaces jar的情况下运行,问题仍然存在。
在服务器中我能看到一条警告:WARN [org.jboss.as.ee] (MSC service thread 1-6) WFLYEE0007: Not installing optional component org.jboss.weld.environment.servlet.Listener due to an exception (enable DEBUG log level to see the cause)。我已启用调试,但没有找到相关信息。
Eclipse配置:JavaServer Faces 2.3;由目标运行时提供的库。Java版本17。Dynamic Web Module(动态Web模块) 6.1。
The index.xhtml行
<p><h:outputLabel value="#{userbean.fullname}"/></p>
将转换为(在浏览器中查看页面源代码)
因此JSF可以工作,只有Bean无法工作。
在此先感谢,如果有谁能给我一个关于正在发生什么的思路。
Faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="3.0" xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_3_0.xsd">
</faces-config>
web.xml
?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="https://jakarta.ee/xml/ns/jakartaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID" version="2.4">
<display-name>Test</display-name>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<context-param>
<param-name>jakarta.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
</web-app>
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_3_0.xsd"
version="3.0"
bean-discovery-mode="all">
</beans>
template.xhtml
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="jakarta.faces.html"
xmlns:f="jakarta.faces.core"
xmlns:ui="jakarta.faces.facelets"
xmlns:p="http://primefaces.org/ui"
lang="utf-8">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><ui:insert name="title">New App</ui:insert></title>
<link rel="stylesheet" type="text/css" href="css/site_earthy.css" />
</head>
<body>
<!-- NAVBAR -->
<div class="navbar">
<a href="index.xhtml">Start</a>
<h:panelGroup rendered="#{loginBean.loggedIn}">
<a href="start/profile.xhtml">Profile</a>
</h:panelGroup>
<h:panelGroup rendered="#{loginBean.admin}">
<a href="start/admin.xhtml">Admin</a>
</h:panelGroup>
<h:panelGroup rendered="#{loginBean.loggedIn}">
<h:form style="display:inline;">
<p:commandLink value="Salir" action="#{loginBean.logout}" styleClass="btn" />
</h:form>
</h:panelGroup>
<h:panelGroup rendered="#{not loginBean.loggedIn}">
<a href="start/login.xhtml">Login</a>
<a href="start/register.xhtml">Register</a>
</h:panelGroup>
</div>
<!-- CONTENT -->
<div class="container">
<ui:insert name="content" />
</div>
</body>
</html>
index.xhtml
<ui:composition template="template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="jakarta.faces.html"
xmlns:f="jakarta.faces.core"
xmlns:ui="jakarta.faces.facelets"
xmlns:p="http://primefaces.org/ui">
<ui:define name="title">Start</ui:define>
<ui:define name="content">
<h1>Welcome</h1>
<p>Explore your panel or edit your profile</p>
<br />
<p><h:outputLabel value="#{userbean.fullname}"/></p>
</ui:define>
</ui:composition>
UserBean.java
import java.io.Serializable;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.SessionScoped;
import jakarta.inject.Named;
@Named("userbean")
@SessionScoped
public class UserBean implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String fullname;
private String email;
private String passwordHash;
@PostConstruct
private void Init() {
fullname = "Sofía";
System.out.println(fullname);
}
public UserBean(String id, String fullname, String email, String passwordHash) {
super();
this.id = id;
this.fullname = fullname;
this.email = email;
this.passwordHash = passwordHash;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFullname() {
System.out.println("GetFullname: " + fullname);
return fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPasswordHash() {
return passwordHash;
}
public void setPasswordHash(String passwordHash) {
this.passwordHash = passwordHash;
}
}
解决方案
我重新进行了全新安装:从Eclipse外部安装WildFly服务器,并使用最新版OpenJDK,现在一切工作正常。Eclipse已更新到2026-06的所有更新。感谢阅读。