Предисловие: я внимательно изучил около 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). Если это нормально, пожалуйста, игнорируйте. Я просто хотел включить как можно больше информации
h:
в файлах xhtml на файлы jsf 2.2+. И вы пробовали исправить@FacesConfig
? - person Kukeltje   schedule 06.09.2019WEB-INF/classes
- это выходная папка, если она пуста, ваш java-файл не скомпилирован, и ошибка, которую вы получаете, вполне нормальна. См. 1c в stackoverflow.com/questions/30128395/. Если класс не скомпилирован, это не вещь jsf, а простая веб-разработка Java, ваша папка javaSource не выглядит реальной исходной папкой для eclipse. Так что сначала исправьте это (а затем jsf 2.3) - person Kukeltje   schedule 06.09.2019package
в исходном коде класса. Честно говоря, это определенно не проблема JSF/CDI, а базовая Java. - person BalusC   schedule 06.09.2019