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:类“xxx”没有可读属性“yyy”

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

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

#{xxx.yyy}

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

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

#{registerController.mitgliedAbc}

它无法找到public MitgliedAbc getMitgliedAbc()房产。

事实上,这种方法并不存在。它被命名getMitgliedABC()而不是getMitgliedAbc().

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

public MitgliedAbc getMitgliedAbc() {
    return mitgliedAbc;
}

也可以看看:

于 2015-01-05T07:44:27.457 回答
0

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

这是我的 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()} 
于 2018-07-13T13:03:15.360 回答