JSF应用在Eclipse、WildFly和 Jakarta Faces环境下无法运行

前端开发 2026-07-09

我找不到我的程序为何不工作的原因。我可以在带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的所有更新。感谢阅读。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章