Цель недоступна, идентификатор «пользователь» преобразован в ноль — не уверен, что не так после исчерпывающего исследования

Предисловие: я внимательно изучил около 10 различных статей о stackoverflow, таких как приведенные ниже, но ни одна из них не разрешила мой вопрос. Поэтому я представляю полный код, чтобы узнать, знает ли кто-нибудь, что может быть не так с моим проектом. Пожалуйста, не отмечайте это как дубликат, так как я уже провел исчерпывающее исследование других статей, подобных этой.

Идентификация и решение javax.el.PropertyNotFoundException: Target Unreachable

Цель недоступна, идентификатор "пользователь" преобразован в null

Идентификатор недостижимого целевого объекта JSF разрешается в null

Target Unreachable, идентификатор разрешен как null в JSF 2.2

Java EE 6: цель недоступна, идентификатор "helloBean" разрешен обнулить


Моя точная ошибка, которую я получаю, когда пытаюсь запустить приведенное ниже приложение JSF (которое является очень простым веб-приложением),

javax.el.PropertyNotFoundException: /index.xhtml @15,45 value="#{user.name}": Target Unreachable, identifier 'user' resolved to null
    at [email protected]//com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:64) ...

Я не знаю, как решить эту проблему, даже после того, как ознакомился с кучей других статей о stackoverflow. Я пришел к следующему выводу:

1) если в коде есть ошибка, то я не знаю что не так поэтому укажите на это, спасибо!

2) если код выглядит нормально для вас, не могли бы вы пересобрать его на своей машине и посмотреть, сможет ли он правильно развернуться? У меня есть ощущение, что это может быть не связано с кодом, поскольку я буквально пробовал так много разных вариантов.

Используемые инструменты: я использую Eclipse, Java 11, JSF 2.2, Servlet 3.1, Wildfly 17.

UserBean.java

package com.corejsf;

import java.io.Serializable;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;

@Named("user")
@SessionScoped
public class UserBean implements Serializable {
    private String name;
    private String password;

    public String getName() {
        return name;
    }

    public void setName(String newValue) {
        name = newValue;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String newValue) {
        password = newValue;
    }
}

index.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <title>Welcome</title>
</h:head>
<h:body>
    <h:form>
        <h3>Please enter your name and password.</h3>
        <table>
            <tr>
                <td>Name:</td>
                <td><h:inputText value="#{user.name}" /></td>
            </tr>
            <tr>
                <td>Password:</td>
                <td><h:inputSecret value="#{user.password}" /></td>
            </tr>
        </table>
        <p>
            <h:commandButton value="Login" action="welcome" />
        </p>
    </h:form>
</h:body>
</html>

welcome.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <title>Welcome</title>
</h:head>
<h:body>
    <h3>Welcome to JavaServer Faces, #{user.name}!</h3>
</h:body>
</html>

web.xml

<?xml version="1.0"?>
<web-app version="3.1"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <display-name>login</display-name>
    <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>

    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
</web-app>

faces-config.xml

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

<faces-config version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">

</faces-config>

РЕДАКТИРОВАНИЕ: в IDE мой обозреватель пакетов выглядит так: структура папок

Однако веб-проекты показывают это (обратите внимание, что в папке «Beans» или папке «classes» нет файла. Не уверен, что это должно произойти, поскольку я новичок в JSF). Если это нормально, пожалуйста, игнорируйте. Я просто хотел включить как можно больше информации

Веб-проекты


person Sekai    schedule 05.09.2019    source источник
comment
Это должно работать, но вы можете попробовать конфигурации на основе xml.   -  person Gaurav Jeswani    schedule 05.09.2019
comment
это никоим образом не отвечает на мой вопрос.   -  person Sekai    schedule 05.09.2019
comment
Wildfly 17 - это jsf 2.3 (.9SP02), как показывает ваша ошибка ... на какой странице вы получаете сообщение об ошибке? Уже при загрузке index.xhtml? Что, если вы замените содержимое приветственного файла индексным файлом? Та же ошибка? Действительно ли развернут файл Java? могу попробовать завтра...   -  person Kukeltje    schedule 06.09.2019
comment
о, и измените объявления пространств имен h: в файлах xhtml на файлы jsf 2.2+. И вы пробовали исправить @FacesConfig?   -  person Kukeltje    schedule 06.09.2019
comment
И изменить Faces-config.xml на 2.3   -  person Kukeltje    schedule 06.09.2019
comment
ошибка возникает, когда я нажимаю кнопку commandButton в index.xhtml   -  person Sekai    schedule 06.09.2019
comment
все еще не работает, попробуйте завтра @Kukeltje, спасибо!   -  person Sekai    schedule 06.09.2019
comment
Я сделаю это, но, по крайней мере, обновлю ваш вопрос, указав исправленные вещи из предыдущего комментария, чтобы я мог использовать это.   -  person Kukeltje    schedule 06.09.2019
comment
Вы используете Maven и имеете файл pom.xml?   -  person Selaron    schedule 06.09.2019
comment
изменение Faces-config.xml на 2.3 дает ошибку, когда я запускаю свой сервер wildfly. И я считаю, что уже использую правильные объявления пространства имен h: для jsf 2.2. Пожалуйста, поправьте меня, если я ошибаюсь в этом.   -  person Sekai    schedule 06.09.2019
comment
Не использую maven, поэтому нет файла pom.xml   -  person Sekai    schedule 06.09.2019
comment
Добавлены скриншоты проводника пакетов и веб-проектов. Пожалуйста, посмотрите и убедитесь, что они верны.   -  person Sekai    schedule 06.09.2019
comment
stackoverflow.com/questions/31068678/ и если использование 2.3 в конфигурации лиц дает вам ошибку, когда вы фактически используете 2.3, исправьте ЭТО... задав вопрос об этом. Я не буду исследовать 2.2 в Faces-config.xml, извините.   -  person Kukeltje    schedule 06.09.2019
comment
WEB-INF/classes - это выходная папка, если она пуста, ваш java-файл не скомпилирован, и ошибка, которую вы получаете, вполне нормальна. См. 1c в stackoverflow.com/questions/30128395/. Если класс не скомпилирован, это не вещь jsf, а простая веб-разработка Java, ваша папка javaSource не выглядит реальной исходной папкой для eclipse. Так что сначала исправьте это (а затем jsf 2.3)   -  person Kukeltje    schedule 06.09.2019
comment
Да, это соответствует 1c. Сделайте шаг назад и узнайте, как создать, разработать и построить обычный проект WAR в Eclipse. Более того, расположение вашего файла UserBean.java на скриншоте совсем не соответствует объявленному package в исходном коде класса. Честно говоря, это определенно не проблема JSF/CDI, а базовая Java.   -  person BalusC    schedule 06.09.2019
comment
@Kukeltje Я только что перечитал 1c по этой ссылке, но я до сих пор не знаю, как сделать «папку javaSource настоящей исходной папкой для Eclipse».   -  person Sekai    schedule 07.09.2019
comment
@BalusC Я сделал так, чтобы файл UserBean.java соответствовал объявленному пакету, но он все еще не отображается в WEB-INF/classes, вероятно, по причине, которую я упомянул в предыдущем комментарии.   -  person Sekai    schedule 07.09.2019
comment
Затем сделайте шаг назад и прочитайте учебник по eclipse java 101. Это не та область, для которой я оказываю поддержку.   -  person Kukeltje    schedule 07.09.2019
comment
Мне удалось заставить его работать, но в папке WEB-INF по-прежнему нет файла класса. Однако класс UserBean теперь находится в папке Beans в представлении веб-проектов (где, как и прежде, его там не было). Хотя теперь я могу запустить свое веб-приложение, потому что в папке WEB-INF нет класса (я могу создать WAR, и в этом пути есть файл .class, но в представлении веб-проектов в Eclipse он не отображается (см. снимок экрана) выше)), я все еще беспокоюсь, что делаю что-то не так...   -  person Sekai    schedule 07.09.2019