目标不可达,标识符[tinyCalculator]解析为空[重复]

问题描述 投票:-1回答:1

我看到有很多类似的问题和答案我的情况,但问题是没有一个为我工作!我试图学习JSF和Spring引导,我已经使用了一些教程为他们管理这个小的简单的代码,但它不工作.问题是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>

我的POM.xml是:

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 "";
}

}

spring-boot cdi jsf-2.2
1个回答
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这样的服务器,那就太宽泛了,有一个 "web profile "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 罐子 现在存在于你的应用程序中。那么这两个之前的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来说,你现在有三个罐子......。

所以请从清理这些东西开始... 使用 "joinfaces "来完成这些工作是件好事。

© www.soinside.com 2019 - 2024. All rights reserved.