目标无法访问,标识符[tinycalculator]解析为null

mlnl4t2r  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(349)

这个问题在这里已经有答案了

识别和解决javax.el.propertynotfoundexception:无法到达目标(17个答案)
如何通过maven正确地安装和配置jsf库(1个答案)
javaee到底是什么(4个答案)
11个月前关门了。
我看到有很多类似的问题和答案,为我的情况,但问题是没有他们为我工作!我正在尝试学习jsf和springboot,我已经为他们使用了一些教程来管理这个简单的小代码,但是它不起作用。问题是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 "";
}

}

5n0oy7gb

5n0oy7gb1#

我要写一个答案,不能解决你的问题,但有太多的错误,在你的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>

这是完整的javaeeapi,如果您运行一个真正的javaee服务器,就需要它。它应该有提供的范围。。。总是。如果您不运行javaee服务器,但是运行类似于tomcat的东西,那么很可能会有一个“web概要文件”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>

因此,假设javaeeapi8jar现在出现在您的应用程序中。那么这两个以前的api已经存在了,很可能是在其他版本(jsf版本2.3,inject-idential)中,这很可能会引起问题。

<!-- 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>

有一个JSF2.3版本,您有一个2.3API。所以你已经用“旧”版本开始你的旅程了。

<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>

这里提到的库也已经在javaeeapi中了,所以也需要复制。即使您没有javaeeapi,也只需要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,您现在有三个jar。。。
所以请从清理这些开始。。。使用“joinfaces”为您完成这一切是一件好事!

相关问题