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

Franz H picture Franz H · Jan 4, 2015 · Viewed 13.5k times · Source

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?

Answer

BalusC picture BalusC · Jan 5, 2015

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: