无法使其在 JSF 测试项目中运行

Unable to make it working a JSF test project

我试图为 JSF (Primefaces) 创建一个测试项目,但它不起作用。测试视图不调用托管 bean。

这是托管 bean:

package it.myPrimefacesTest.controller;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ViewScoped
@ManagedBean(name="helloWorld", eager=true)
public class HelloWorld implements Serializable {
    private static final long serialVersionUID = 7184399511928573344L;
    
   @SuppressWarnings("static-method")
   public String getMessage() {
      return "Hello World!";
   }
}

这是test.xhtml:

<!DOCTYPE html>

<f:view xmlns="http://www.w3.org/1999/xhtml"
   xmlns:ui="http://java.sun.com/jsf/facelets"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   contentType="text/html"
>
   
<html>
<h:head></h:head>
    
<body>
    ciao!
      
    <h:inputText></h:inputText>
    <h:outputText value="#{helloWorld.getMessage()}"></h:outputText>
</body>
</html>
</f:view>

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/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>MyPrimefacesTest</display-name>
  <servlet>
    <servlet-name>MyPrimefacesTest</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>MyPrimefacesTest</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>
  
  <servlet-mapping>
    <servlet-name>MyPrimefacesTest</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  
  <context-param> 
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>true</param-value>
  </context-param>
  
    <welcome-file-list>
        <welcome-file>test.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

faces-config.xml:

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd"
    version="2.1"
>

</faces-config>

<h:outputText value="#{helloWorld.getMessage()}"></h:outputText>test.xhtml 中不起作用。

我正在使用:

这是因为我的项目是这样创建的,我想成为1:1。

这是项目:https://ufile.io/ihd8j37g。您必须点击免费下载,然后点击慢速。

如果您尝试检查已部署的耳朵,您会发现 MyPrimefacesTest.war 里面只有 PF jar、faces-config.xmlweb.xml,没有 .class 文件。
如果您将项目导出到一个 ear 文件中也是一样。
由于未部署编译代码,因此不可能在 运行 时 运行 它。
如果您在 war 中导出 MyPrimefacesTest 输出文件夹,您会发现问题已解决。
为此,您可以尝试替换

<classpathentry kind="src" path="src"/>

<classpathentry kind="src" output="build/classes" path="src"/>

MyPrimefacesTest.classpath 文件中。

根据您的需要,您可以选择多种方式来实现此目标:

  • 修改类路径
  • 修改清单
  • 如果您使用 Maven,您可以根据需要修改 pom.xml,gradle 或者如果您使用 ant 脚本
  • 也是如此

记得在部署新耳朵之前清理你的服务器(对于较低的 jBoss 版本,清理部署目录也很有用)。

已修复。感谢 为我提供了正确的建议。这就是我在 Project -> Properties:

中所做的
  1. Java Build path -> Source -> Default output folder:设置为MyPrimefacesTest/build/classes
  2. Deployment Assembly -> Add -> Folder -> src,然后我将部署路径设置为 WEB-INF/classes
  3. 重启电脑(迷信...)
  4. 前往 JBoss standalone 文件夹,删除子文件夹 datalogtmp 并清空 deployments 文件夹
  5. 启动 Eclipse
  6. 清理项目和 EAR 项目
  7. 转到服务器。如果您的服务器有除此之外的其他 EAR,请删除它们。确保在启动此服务器之前清除其他服务器。
  8. 清除服务器
  9. 启动服务器
  10. 祈祷:D