通过以下链接挖掘后,我无法解决问题:识别并解决javax.el.PropertyNotFoundException:目标无法访问
我得到以下错误:javax.servlet.ServletException:/Project9.html@13,55 value="#{ProjectBean.introse}":目标不可达,标识符[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>
我在WEB-INF的lib文件夹中有我的faces-config.xml和javax-faces.2.2.8.jar文件我在Java资源的src文件夹中有我的bean
我有另一个名为helloworld的项目,其中有几个JSF小项目都能正常工作,我曾尝试将project9复制到helloworl德中并运行它,但我只在项目上遇到了同样的错误
我试着按照人们建议的来清理我的项目
这是一个学生项目,也是我对JSF和Tomcat的第一次介绍。我使用的是Mac和Eclipse光子。
正如我在代码中的一条注释中所说,如果我试图绕过响应xhtml文件,直接转到html表单中的javabean方法,我会在ProjectBean.abovePovertyLevel((下得到一条下划线,并出现错误"操作值与导航用例结果不匹配">
我不确定上面链接中关于CDI等的一些答案,在这一点上,一切都在我的脑海中。
没关系,我刚刚解决了这个问题在我的注释中添加了一个名称:@ManagedBean(name="ProjectBean"(
此外,我意识到,如果我没有首先申报贫困水平,我的方法是错误的
int povertyLevel = (16460 + 4230 * (numPeople-2));
if(income > povertyLevel)
return true;
else{
return false;
}
这似乎起作用
用#{projectBean.
替换所有#{ProjectBean.
(使第一个字符小写(。
这是因为您需要通过名称而不是类名来引用托管bean。默认情况下,jsf将根据https://docs.oracle.com/javaee/6/api/javax/faces/bean/ManagedBean.html:
如果name属性的值未指定或为空String,则托管bean名称是通过获取完全限定类名的非限定类名部分并将第一个字符转换为小写而派生的。例如,如果ManagedBean注释位于具有完全限定类名com.example.Bean的类上,并且注释上没有name属性,则托管Bean名称将被视为Bean。