【问题标题】:JSF: ContextAwarePropertyNotFoundException/javax.el.PropertyNotFoundExceptionJSF:ContextAwarePropertyNotFoundException/javax.el.PropertyNotFoundException
【发布时间】:2013-08-28 22:12:57
【问题描述】:

我有一个 JSF 页面 home.xhtml,其中包含一些 JSF 组件/视图,假设它当前加载在名为 test-popoup-win 的 (Firefox) 浏览器弹出窗口中。现在我尝试从另一个 (Firefox) 浏览器窗口访问相同的页面/url,home.xhtml?query=JSF,带有额外的 url 参数,该窗口应该加载不同/新的组件集,基于新的搜索上下文 (?query=JSF)。这会在同一个浏览器弹出窗口中加载 home.xhtml,名为 test-popup-win,覆盖以前的 JSF 组件/视图。在后端 servlet 代码中,我实际上是 重定向 到同一个页面 home.xhtml?query=JSF。

但不是显示新视图,而是引发以下错误。日志显示未找到属性。我可以确认该属性未找到,属于旧视图/bean。但是,如果我在自定义错误页面上单击继续,我会毫无问题地获得新视图。

请提供帮助/建议,通过建议一种可以干净地清除先前视图并加载新视图或任何其他解决问题的方式的方法。如果我缺少任何输入,请告诉我。非常感谢。

有什么好的方法可以调试这种 JSF 问题吗?

更新: 一种可能不太好的临时解决方法(我什至不称之为解决方案)可能是忽略 FacesErrorHandlingServlet 类中的异常。 我仍在尝试/寻找一个好的解决方案,如果你有,请分享

*15:58:55,495 ERROR [stderr] (http-/0.0.0.0:8080-10) **javax.servlet.ServletException: javax.el.PropertyNotFoundException: The class 'com.test.ContainerBean' does not have the property 'testJsonData'.**
15:58:55,496 ERROR [stderr] (http-/0.0.0.0:8080-10)     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:229)
15:58:55,496 ERROR [stderr] (http-/0.0.0.0:8080-10)     at org.apache.myfaces.webapp.MyFacesServlet.service(MyFacesServlet.java:112)
15:58:55,497 ERROR [stderr] (http-/0.0.0.0:8080-10)     at **com.test.FacesErrorHandlingServlet**.service(FacesErrorHandlingServlet.java:44)
15:58:55,497 ERROR [stderr] (http-/0.0.0.0:8080-10)     at sun.reflect.GeneratedMethodAccessor293.invoke(Unknown Source)
.
.
.
15:58:55,536 ERROR [stderr] (http-/0.0.0.0:8080-10) **Caused by: javax.el.PropertyNotFoundException: The class 'com.test.ContainerBean' does not have the property 'testJsonData'.**
15:58:55,537 ERROR [stderr] (http-/0.0.0.0:8080-10)     at javax.el.BeanELResolver.getBeanProperty(BeanELResolver.java:661)
15:58:55,537 ERROR [stderr] (http-/0.0.0.0:8080-10)     at javax.el.BeanELResolver.getValue(BeanELResolver.java:290)
15:58:55,537 ERROR [stderr] (http-/0.0.0.0:8080-10)     at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175)
15:58:55,538 ERROR [stderr] (http-/0.0.0.0:8080-10)     at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:179)
15:58:55,538 ERROR [stderr] (http-/0.0.0.0:8080-10)     at org.apache.el.parser.AstValue.getValue(AstValue.java:166)
15:58:55,539 ERROR [stderr] (http-/0.0.0.0:8080-10)     at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
15:58:55,539 ERROR [stderr] (http-/0.0.0.0:8080-10)     at org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.getValue(ContextAwareTagValueExpression.java:96)
15:58:55,540 ERROR [stderr] (http-/0.0.0.0:8080-10)     ... 82 more* 

【问题讨论】:

  • 在不阅读整个 q' 的情况下,您尝试在代码中的某处访问 testJsonData 内部的 testJsonData 属性 ContainerBean ,但它不存在或没有 getter/setter...检查一下跨度>
  • 您是否将您的 bean 作为 ui:param 的参数?
  • 只要确保你没有在你的 bean 上调用不存在的 getter/setter,或者确保所有的 bean 共享相同的属性(继承)或者用 @ 包装你的组件(试图访问你的 getter) 987654327@或类似的东西
  • 请注意,我已将我的一些 cmets 移至原始帖子中。

标签: jsf jsf-2 jsf-1.2 propertynotfoundexception


【解决方案1】:

确保您没有在您的 bean 上调用不存在的 getter/setter,或确保所有 bean 共享相同的基本属性(继承)或使用 rendered="#{myBean.typeOfBean eq 'theOneWithThatProperty'}" 或类似的东西包装您的组件(尝试访问您的 getter)那……

【讨论】:

  • 如果有任何通用解决方案,请提供建议确保您不会在您的 bean 上调用不存在的 getter/setter 我担心其他两种解决方案可能不适合我的情况,我有很多很多豆子。谢谢。
  • 我的答案包含我可以建议您使用的想法,也许还有其他一些我没有想到的方式...如果您发布您的代码 sn-p me 或其他将是能为您提供更多帮助
猜你喜欢
  • 2015-02-25
  • 2016-02-17
  • 2016-05-05
  • 2017-06-11
  • 2012-10-30
  • 2011-12-06
  • 2012-11-27
  • 2014-04-14
相关资源
最近更新 更多