4

以下のセッション スコープの 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' がありません。

これはどのように発生し、どうすれば解決できますか?

4

2 に答える 2

13

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:

于 2015-01-05T07:44:27.457 に答える