问题:GlassFish 6.2.3 看不到 javax.faces.webapp.FacesServlet

我在本地计算机上使用 glassfish6.2.3。如果我将这些行添加到 web.xml

 <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>

然后出现以下错误:

java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet 在 org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1577) 在 org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:第1427章 org.apache.catalina.core.StandardWrapper.loadServletClass(StandardWrapper.java:1391) .load(StandardWrapper.java:1239) 在 org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5343) 在 org.apache.catalina.core.StandardContext.start(StandardContext.java:5588) 在 com。 sun.enterprise.web.WebModule.start(WebModule.java:510) 在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:877) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase. java:860) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:644) at com.sun.enterprise.web.WebContainer.loadWebModule(WebCont ainer.java:2020) 在 com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1666) 在 com.sun.enterprise.web.WebApplication.start(WebApplication.java:82) 在 org.glassfish.internal .data.EngineRef.start(EngineRef.java:98) 在 org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:267) 在 org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:328 ) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:480) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:199) 在 org.glassfish.deployment。 admin.DeployCommand.execute(DeployCommand.java:467) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:516) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1。在 com.sun 的 java.base/javax.security.auth.Subject.doAs(Subject.java:361) 的 java.base/java.security.AccessController.doPrivileged(Native Method) 运行 (CommandRunnerImpl.java:512)。企业.v3.admin.CommandRunnerImpl$2.ex ecute(CommandRunnerImpl.java:511) at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:542) at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java: 534) 在 java.base/javax.security.auth.Subject.doAs(Subject.java:361) 在 com.sun.enterprise.v3.admin 的 java.base/java.security.AccessController.doPrivileged(Native Method)。 CommandRunnerImpl.doCommand(CommandRunnerImpl.java:533) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1441) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl. java:1823) 在 org.glassfish.deployment.autodeploy.AutoOperation.run(AutoOperation.java:140) 在 org.glassfish.deployment.autodeploy.AutoDeployer.deploy(AutoDeployer.java:573) 在 org.glassfish.deployment.autodeploy .AutoDeployer.deployAll(AutoDeployer.java:460) 在 org.glassfish.deployment.autodeploy.AutoDeployer.run(AutoDeployer.java:388) 在 org.glassfish.deployment.autodeploy.AutoDeployer.run(Aut oDeployer.java:379) at org.glassfish.deployment.autodeploy.AutoDeployService$1.run(AutoDeployService.java:209) at java.base/java.util.TimerThread.mainLoop(Timer.java:556) at java.base/ java.util.TimerThread.run(Timer.java:506)

否则,一切正常,但不显示 jsf 元素

解答

GlassFish 6.2.3 实现了 Jakarta EE 9.1 和 Faces 3.0。这些使用Jakarta命名空间。因此,您的 servlet 声明应为:

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
</servlet>

请注意,除了在 web.xml 中定义 servlet,您还可以在应用程序中使用@FacesConfig注释。这将默认将所有视图映射到.xhtml

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐