Цель jsf недоступна, идентификатор [bean] разрешен до нуля
После просмотра ссылок, подобных следующим, я не могу решить проблему: Определение и решение javax.el.PropertyNotFoundException: Target Unreachable
Я получаю следующую ошибку: javax.servlet.ServletException: /Project9.xhtml @13,55 value="#{ProjectBean.income}": цель недоступна, идентификатор [ProjectBean] разрешен как ноль
Моя форма:
<!DOCTYPE html>
<html xmlns="http://wwww3.org/1999/xhtml"
xmlns:a="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
>
<h:head>
<title>Project9</title>
</h:head>
<h:body>
<h:form>
Income: <h:inputText value="#{ProjectBean.income}"/>
Number of people: <h:inputText value="#{ProjectBean.numPeople}"/>
<h:commandButton value= "Submit" action= "Project9response"/>
</h:form>
</h:body>
</html>
Я не уверен, является ли правильное соглашение wwww3.org или www.3.org, но я попробовал их обоих.
Страница моего ответа:
<!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:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
>
<h:head>
<title><ui:insert name="title">Project 9 response</ui:insert></title>
</h:head>
<h:body>
Am I above the poverty level: #{ProjectBean.abovePovertyLevel()}
</h:body>
</html>
Мой боб:
@ManagedBean
@SessionScoped
public class ProjectBean implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private double income;
private double numPeople;
//constructor is no arg
public ProjectBean() {
}
public double getIncome() {
return income;
}
public void setIncome(double income) {
this.income = income;
}
public double getNumPeople() {
return numPeople;
}
public void setNumPeople(double numPeople) {
this.numPeople = numPeople;
}
public boolean abovePovertyLevel() {
if ( income < (16460.00 + 4320.00) * (numPeople - 2)){
return false;
}
else {
return true;
}
}
}
Мои лица-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
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_3.xsd"
version="2.3">
</faces-config>
У меня есть мой файл face-config.xml и мой файл javax-face.2.2.8.jar в папке lib WEB-INF У меня есть бин в папке src Ресурсов Java
У меня есть другой проект под названием helloworld с несколькими небольшими проектами JSF, которые все работают, и я попытался скопировать project9 в helloworld и запустить его, но я получаю ту же ошибку только в этом проекте
Я пытался очистить свой проект, как люди предложили
Это студенческий проект и мое первое знакомство с JSF и Tomcat. Я использую фотон Mac и Eclipse.
Как я указывал в комментарии в своем коде, если я пытаюсь обойти файл xhtml ответа и сразу перейти к методу javabean в моей html-форме, я получаю подчеркивание в ProjectBean.abovePovertyLevel() и появляется ошибка "значение действия не соответствовать результату навигации "
Я не уверен в некоторых ответах по ссылке выше относительно CDI и т. Д., Что на данный момент все выше моего понимания.
2 ответа
Неважно, я просто решил это Добавил имя к моей аннотации как таковой: @ManagedBean(name="ProjectBean")
Также я понял, что мой метод был неправильным, если я сначала не объявил уровень бедности
int povertyLevel = (16460 + 4230 * (numPeople-2));
if(income > povertyLevel)
return true;
else{
return false;
}
Казалось, это работает
Заменить все #{ProjectBean.
от #{projectBean.
(сделать первый символ строчным).
Это потому, что вам нужно обращаться к управляемому бину по имени, а не по имени класса. По умолчанию jsf сгенерирует это имя для вас, согласно документам на https://docs.oracle.com/javaee/6/api/javax/faces/bean/ManagedBean.html:
Если значение атрибута name не указано или является пустой строкой, имя управляемого bean-компонента получается из взятия части неквалифицированного имени класса полного имени класса и преобразования первого символа в нижний регистр. Например, если аннотация ManagedBean находится в классе с полностью определенным именем класса com.example.Bean, и в аннотации отсутствует атрибут name, то имя управляемого bean-компонента принимается как bean-компонент.