javax.el.PropertyNotFoundException报错求助:execise04解析为null
解决JSF中
javax.el.PropertyNotFoundException:Target Unreachable, identifier 'execise04' resolved to null 我太懂这种反复卡同一个问题、看帖子还绕圈子的烦躁了!咱们直接抓核心——这个错误本质就是JSF找不到你在EL表达式里写的execise04托管Bean,大概率是拼写、配置或者类声明的问题,咱们一个个排查:
1. 先查最容易踩的坑:拼写错误
你在xhtml里写的是#{execise04.getInput},先去核对你的Bean类名:
- 是不是类名是
Exercise04(注意多了个字母r),但EL里写成了execise04? - 类名的首字母小写后是不是和EL里的名称完全一致?比如类名是
Execise04,小写后是execise04,这个要完全匹配,大小写、字母一个都不能错!
2. 确认Bean被正确声明为JSF托管Bean
JSF不会自动把普通Java类当成托管Bean,必须明确声明:
方式一:用注解推荐
- 如果是JSF原生注解:在Bean类顶部加
@ManagedBean(导入javax.faces.bean.ManagedBean),还要配合作用域注解,比如@RequestScoped(导入javax.faces.bean.RequestScoped):import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; @ManagedBean(name = "execise04") // 这里的name可以指定,和EL里的名称一致 @RequestScoped public class Execise04 { // 你的getInput方法 public String getInput() { // 逻辑代码 return "someValue"; } } - 如果用CDI更现代:用
@Named(导入javax.inject.Named)配合@RequestScoped(导入javax.enterprise.context.RequestScoped):
注意:别把不同包的注解混着用,比如CDI的import javax.inject.Named; import javax.enterprise.context.RequestScoped; @Named("execise04") @RequestScoped public class Execise04 { public String getInput() { // 逻辑代码 return "someValue"; } }@RequestScoped和JSF原生的@ManagedBean搭配会出问题。
方式二:用faces-config.xml配置
如果是用XML配置的方式,要确保在WEB-INF/faces-config.xml里正确注册Bean:
<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_2.xsd" version="2.2"> <managed-bean> <managed-bean-name>execise04</managed-bean-name> <!-- 必须和EL里的名称完全一致 --> <managed-bean-class>com.yourpackage.Execise04</managed-bean-class> <!-- 你的Bean类的完整包路径 --> <managed-bean-scope>request</managed-bean-scope> <!-- 按需选作用域:request/session/application等 --> </managed-bean> </faces-config>
3. 检查Bean的作用域是否正确
不管用注解还是XML,都必须指定有效的作用域,不能只加@ManagedBean或@Named却不指定作用域——没有作用域的类不会被JSF识别为托管Bean。
4. 确认Bean类的存放位置
不要把Bean类放在默认包里(也就是直接放在src目录下,没有包名),JSF对默认包的支持很差,一定要把Bean放在有包名的目录里,比如com.ashanti.exercises这种结构。
5. 最后检查项目编译和部署
- 确保IDE已经正确编译了你的Bean类,查看项目的
target或build目录下,WEB-INF/classes里有没有你的Execise04.class文件; - 如果是Maven/Gradle项目,执行一次
clean再build,避免编译缓存导致的问题。
先从拼写检查开始!很多时候这种“找不到Bean”的问题,都是一个字母的拼写错误导致的,别小看这个细节~
内容的提问来源于stack exchange,提问作者Ashanti Negus
相关产品推荐
相关产品推荐

