我有以下会话范围的 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”。
这是怎么造成的,如何解决?
javax.el.PropertyNotFoundException:类“xxx”没有可读属性“yyy”
这基本上意味着类
xxx
没有属性 yyy
的(有效)getter 方法。
换句话说,下面的 EL 表达式应该输出该值,
#{xxx.yyy}
无法在
public Yyy getYyy()
类上找到 xxx
方法。
在您的特定情况下,使用以下 EL 表达式,
#{registerController.mitgliedAbc}
无法找到
public MitgliedAbc getMitgliedAbc()
属性。
事实上,这种方法并不存在。它被命名为
getMitgliedABC()
而不是 getMitgliedAbc()
。
相应地修复方法名称以完全匹配
getYyy()
,并绝对确保它是public
且非static
。
public MitgliedAbc getMitgliedAbc() {
return mitgliedAbc;
}
我有同样的错误,我得到了解决方案
这是我的雇员模型
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()}
我收到此错误是因为我试图访问嵌套枚举的字段。这不起作用,因为嵌套枚举是静态的。我的解决方案是向视图 bean 添加另一种方法来访问枚举字段。