【问题标题】:Target Unreachable, identifier [tinyCalculator] resolved to null [duplicate]目标不可达,标识符 [tinyCalculator] 解析为 null [重复]
【发布时间】:2020-09-28 22:16:48
【问题描述】:

我看到我的情况有很多类似的问题和答案,但问题是它们都不适合我! 我正在尝试学习 JSF 和 Spring boot,并且我已经使用了一些教程来管理这个简单的小代码,但是它不起作用。 问题是 Eclipse 知道我的托管 Bean 及其在 jsf 页面中的属性,并且我的页面呈现完美,但是当我输入数字并单击任何命令按钮时,就会出现错误! 我想也许它找不到目标类,所以我尝试用

定义它
<build>
    <outputDirectory>src\main\webapp\WEB-INF\classes</outputDirectory>

但没有发生任何不同!你能帮帮我吗? 我的 pom.xml 是:

<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.tebmahani</groupId>
  <artifactId>Memorist</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <dependencies>

    <!-- https://mvnrepository.com/artifact/javax/javaee-api -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>8.0.1</version>
        <!-- <scope>provided</scope> -->
    </dependency>   

    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
        <!-- <scope>provided</scope> -->
    </dependency>  

    <!-- https://mvnrepository.com/artifact/com.sun.faces/jsf-api -->
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.2.20</version>
    </dependency>   

    <!-- https://mvnrepository.com/artifact/com.sun.faces/jsf-impl -->
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.20</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <!-- <scope>provided</scope> -->
    </dependency>   

    <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.3</version>
       <!--  <scope>provided</scope> -->
    </dependency>   

    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <version>2.0</version>
        <!-- <scope>provided</scope> -->
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.sun.el/el-ri -->
    <dependency>
        <groupId>com.sun.el</groupId>
        <artifactId>el-ri</artifactId>
        <version>1.0</version>
    </dependency>


<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-catalina</artifactId>
    <version>9.0.35</version>
</dependency>

    <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.6.2</version>
        <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <outputDirectory>src\main\webapp\WEB-INF\classes</outputDirectory>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
                <configuration>
                    <failOnMissingWebXml>true</failOnMissingWebXml>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
  </build>
</project>

我的托管 Bean 是:

package com.tebmahani.tinyCalculator;

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named("tinyCalculator")
@RequestScoped
public class TinyCalculator {

private double _param1;
private double _param2;
private double _result;

public TinyCalculator() {}

public TinyCalculator(double param1, double param2, double result) {
    super();
    this._param1 = param1;
    this._param2 = param2;
    this._result = result;
}

public double getParam1() {
    return _param1;
}

public void setParam1(double param1) {
    this._param1 = param1;
}

public double getParam2() {
    return _param2;
}

public void setParam2(double param2) {
    this._param2 = param2;
}

public double getResult() {
    return _result;
}

public void setResult(double result) {
    this._result = result;
}

public String add() {
    this._result = _param1 + _param2;
    return "";
}

public String subtract() {
    this._result = _param1 - _param2;
    return "";
}

public String multiply() {
    this._result = _param1 * _param2;
    return "";
}

public String divide() {
    this._result = _param1 / _param2;
    return "";
}

}

【问题讨论】:

  • 99.99% 确定其中之一会为您工作。很可能您没有完全阅读它们或理解错误。但是你肯定做错的不是显示和说明你做了其他问题中提到的所有事情。如果投票最多的问题,我将投票结束这个问题作为重复问题。我想防止它被关闭,改进问题......很多!

标签: spring-boot cdi jsf-2.2


【解决方案1】:

我要写一个不能解决你的问题的答案,但是你的 pom 中有太多错误,它不适合评论......

<outputDirectory>src\main\webapp\WEB-INF\classes</outputDirectory>

使用 src 文件夹作为输出文件夹是错误的......永远不要这样做。有一个目标文件夹,如果某些东西由于奇怪的原因没有出现,请将它们添加到正确的目标位置,而不是 src 文件夹。检查课程是否存在也很简单。

    <!-- https://mvnrepository.com/artifact/javax/javaee-api -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>8.0.1</version>
        <!-- <scope>provided</scope> -->
    </dependency>

这是完整的 java ee api,如果您运行真正的 java-ee 服务器则需要。然后它应该具有提供的范围......总是。如果您不运行 java-ee 服务器,而是运行类似 tomcat 的服务器,那么它很广泛。有一个“网络配置文件”api,但这应该适用于真正应用程序服务器的轻量级版本,而不是像 tomcat 这样的东西。所以这个api应该被删除。

    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
        <!-- <scope>provided</scope> -->
    </dependency>  

    <!-- https://mvnrepository.com/artifact/com.sun.faces/jsf-api -->
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.2.20</version>
    </dependency> 

假设javaee api 8 jar 现在出现在您的应用程序中。那么这两个之前的 api 已经存在,很可能在其他版本中(JSF 版本 2.3,注入相同)很可能会导致问题。

    <!-- https://mvnrepository.com/artifact/com.sun.faces/jsf-impl -->
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.20</version>
    </dependency>

有一个 JSF 2.3 版本,你有一个 2.3 api。因此,您已经从“旧”版本开始您的旅程。

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <!-- <scope>provided</scope> -->
    </dependency>   

    <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.3</version>
       <!--  <scope>provided</scope> -->
    </dependency>   

    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <version>2.0</version>
        <!-- <scope>provided</scope> -->
    </dependency>

这里提到的库也已经在 javaee api 中,所以也是重复的。即使你没有java ee api,唯一需要的就是cdi。应始终提供其他的。

    <!-- https://mvnrepository.com/artifact/com.sun.el/el-ri -->
    <dependency>
        <groupId>com.sun.el</groupId>
        <artifactId>el-ri</artifactId>
        <version>1.0</version>
    </dependency>


<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-catalina</artifactId>
    <version>9.0.35</version>
</dependency>

这又重复了几个以前的 api... 因为他们有不同的 maven groupId,artifactId 他们将被包括在内。实现还可以,但是对于某些 api,你现在有三个 jars...

所以请从清理所有这些开始...使用“joinfaces”为您完成所有这些是一件好事!

【讨论】:

  • 谢谢@Kukeltje。显然我是 JSF 的新手,我也不太了解依赖关系。我寻求答案很长时间,甚至阅读了您上面提到的论文,并添加了我认为可能对我有帮助的东西。看来我让它变得更糟了,应该从第一步再试一次。感谢您提供有关依赖项的好提示。我会检查并修改它们,然后再试一次。
  • 没问题,但是大部分都不是真正的jsf相关的。尝试连接面并确保您最初在开发模式下运行您的应用程序
  • 好的,谢谢。如果我删除这个问题可以吗?看来除了我对任何人都没有帮助! :)
  • 就这样吧。 manven 的东西可能会帮助其他人……如果“社区”想要删除它,它会的。干杯
  • 好的。 :) @Kukeltje。当我找到解决方案并且有效时,我会在这里告诉它。
猜你喜欢
  • 2014-08-24
  • 1970-01-01
  • 2013-12-28
  • 2016-03-09
  • 2016-02-15
  • 2018-10-23
  • 2013-07-20
  • 2014-02-10
  • 1970-01-01
相关资源
最近更新 更多