javax.el.PropertyNotFoundException:类“xxx”没有可读属性“yyy”

Posted

技术标签:

【中文标题】javax.el.PropertyNotFoundException:类“xxx”没有可读属性“yyy”【英文标题】:javax.el.PropertyNotFoundException: The class 'xxx' does not have a readable property 'yyy' 【发布时间】:2015-03-02 10:00:59 【问题描述】:

我有以下会话范围的 CDI 托管 bean:

@Named
@SessionScoped
public class RegisterController implements Serializable    
    private static final long serialVersionUID = 1L;

    @Inject
    private MitgliedAbc mitgliedAbc;

    public MitgliedAbc getMitgliedABC() 
        return mitgliedAbc;
    

    public void setMitgliedAbc (MitgliedAbc mitgliedAbc) 
        this.mitgliedAbc = mitgliedAbc;
    


在 JSF 表单中输入以下内容:

<h:inputText value="#registerController.mitgliedAbc.mgEmail" />

部署到 GlassFish 4.1 并在浏览器中打开页面时,抛出以下异常:

javax.el.PropertyNotFoundException: /register.xhtml @27,66 value="#registerController.mitgliedAbc.mgEmail": 类 'com.example.RegisterController' 没有 有一个可读的属性 'mitgliedAbc'。

这是怎么引起的,我该如何解决?

【问题讨论】:

你应该将RegisterController类的代码添加到问题中。 嗨 BalusC,非常感谢!我知道它一定是错字,但我是瞎子,找不到它。不可能是错字 这能回答你的问题吗? javax.el.PropertyNotFoundException: Property 'foo' not found on type com.example.Bean 【参考方案1】:

javax.el.PropertyNotFoundException:类“xxx”没有可读属性“yyy”

这基本上意味着xxx 类没有属性yyy 的(有效)getter 方法。

换句话说,下面的EL表达式应该输出值,

#xxx.yyy

无法在 xxx 类上找到 public Yyy getYyy() 方法。

在您的特定情况下,使用以下 EL 表达式,

#registerController.mitgliedAbc

找不到public MitgliedAbc getMitgliedAbc() 属性。

确实,这种方法不存在。它被命名为 getMitgliedABC() 而不是 getMitgliedAbc()

相应地修复方法名称以完全匹配getYyy(),并确保它是public 和非static

public MitgliedAbc getMitgliedAbc() 
    return mitgliedAbc;

另见:

javax.el.PropertyNotFoundException: Property 'foo' not found on type com.example.Bean Identifying and solving javax.el.PropertyNotFoundException: Target Unreachable

【讨论】:

嗨 BalusC,非常感谢!我知道它一定是一个错字,但我是瞎子,找不到它。谢谢,弗朗茨 这个技巧对我有用“它是公共的和非静态的”。我试图访问静态内部类的成员。 谢谢!我忘了在我的代码中添加 getter setter。【参考方案2】:

我遇到了同样的错误,我得到了解决方案

这是我的 Emp 模型

public class Emp 
    private String Eid;
    private String Ename;
    private String Mobile;
    private String Email;

    public String getEid() 
        return Eid;
    

    public void setEid(String Eid) 
        this.Eid = Eid;
    

    public String getEname() 
        return Ename;
    

    public void setEname(String Ename) 
        this.Ename = Ename;
    

.........etc

还有我的控制器方法

 @RequestMapping(value="/welcome", method=RequestMethod.POST)
    public ModelAndView CtrlMethod(@ModelAttribute("employee1") Emp employee1) 
         ModelAndView model = new ModelAndView("hellopage");
         return model;    
    

在我的 (hellopage.jsp) JSP 页面中,我像下面提到的那样,它对我有用。

 $employee1.getEid()
 $employee1.getEname()
 $employee1.getMobile()
 $employee1.getEmail() 

【讨论】:

以上是关于javax.el.PropertyNotFoundException:类“xxx”没有可读属性“yyy”的主要内容,如果未能解决你的问题,请参考以下文章