javax.el.PropertyNotFoundException: The class 'xxx' does not have a readable property 'yyy'

15k Views Asked by At

I've the below session scoped CDI managed 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;
    }

}

And the following input in a JSF form:

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

When deploying to GlassFish 4.1 and opening the page in browser, the following exception is thrown:

javax.el.PropertyNotFoundException: /register.xhtml @27,66 value="#{registerController.mitgliedAbc.mgEmail}": The class 'com.example.RegisterController' does not have a readable property 'mitgliedAbc'.

How is this caused and how can I solve it?

2

There are 2 best solutions below

3
On

javax.el.PropertyNotFoundException: The class 'xxx' does not have a readable property 'yyy'

This basically means that the class xxx does not have a (valid) getter method for property yyy.

In other words, the following EL expression which should output the value,

#{xxx.yyy}

was unable to find a public Yyy getYyy() method on class xxx.

In your particular case, with the following EL expression,

#{registerController.mitgliedAbc}

it was unable to find a public MitgliedAbc getMitgliedAbc() property.

And indeed, that method doesn't exist. It's named getMitgliedABC() instead of getMitgliedAbc().

Fix the method name accordingly to exactly match getYyy() and make absolutely sure it's public and non-static.

public MitgliedAbc getMitgliedAbc() {
    return mitgliedAbc;
}

See also:

0
On

I had the same error and I got the solution

This is my Emp Model

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

And my Controller method

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

In My (hellopage.jsp) JSP Page I mentioned like bellow and it works for me.

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