【问题标题】:javax.faces.FacesException: Expression Error: Named Object: net.bootsfaces.layout.Well not foundjavax.faces.FacesException:表达式错误:命名对象:net.bootsfaces.layout.Well 未找到
【发布时间】:2015-09-26 16:17:53
【问题描述】:

我正在尝试使用 BootsFaces 0.7 测试 JSF 2.2 项目。 该项目在 GlassFish 3 和 PrimeFaces 5.2 上运行得非常好。 但是在使用 BootsFaces 库中的任何标签的页面上,例如 <b:well>,我得到以下异常:

javax.faces.FacesException:表达式错误:命名对象:net.bootsfaces.layout.Well 未找到

这是怎么引起的,我该如何解决?

【问题讨论】:

  • 能否翻译一下错误信息?
  • 未检测到名为“net.bootsfaces.layout.Well”的对象
  • 你在webapp的web.xml中有metadata-complete="true"吗?对于本地化错误,请将您的开发环境改为英文。将英文错误信息复制粘贴到搜索引擎中时,您将获得更多线索。
  • 关于如何定位 NetBeans 和 glassfish 3 中的错误(英文)的任何建议?
  • 基本上,您需要添加-Duser.language=en -Duser.country=US 作为Netbeans 使用的JRE 的VM 参数。由于我不使用 Netbeans,所以不知道在 Netbeans 中的具体配置位置。

标签: jsf bootsfaces


【解决方案1】:

Thanks to this answer ,我终于找到了解决问题的方法: 我不得不将 boots faces jar 文件放在 /WEB-INF/lib 目录中。 我永远不会厌倦说它:非常感谢BalusC

【讨论】:

  • 糟糕——我没想到你可以尝试在 /WEB-INF/lib 文件夹中不使用 BootsFaces.jar :)。我会将其添加到我的标准补救措施列表中。感谢您的反馈!
  • 但对我来说仍然很奇怪,因为我总是在 /domain/lib 而不是 /WEB-INF/lib 中拥有 primefaces 和过去的richfaces,并且一切运行良好。这个 bootsfaces 库发生了什么变化?
  • 啊,我明白了。我一直使用 Tomcat,所以我不知道 /domain/lib 文件夹。实际上,PrimeFaces 和 BootsFaces 的初始化方式在技术上没有区别(至少我知道没有区别)。也许答案很简单:大多数应用服务器按字母顺序加载它们的库。所以 BootsFaces 在 Mojarra 或 MyFaces 之前加载,后者在 PrimeFaces 和 RichFaces 之前加载。但这只是一个狂野的镜头。现在我知道您正在使用 Glassfish,我们可以测试 BootsFaces 与 Glassfish 的兼容性。感谢您的提示!
【解决方案2】:

2015 年 10 月 5 日更新: 如果您碰巧使用 Spring Boot 和 Mojarra,请返回 Mojarra 2.2.10。较新的版本已损坏,并且在 Spring Boot 票证 https://github.com/spring-projects/spring-boot/issues/3216 得到解决之前,它们将一直处于损坏状态。或者,您可以尝试 Apache MyFaces,如 http://www.beyondjava.net/blog/newsflash-running-example-of-spring-boot-jsf/ 中所述。

错误消息表示无法创建类net.bootsfaces.layout.Well。您没有给出堆栈跟踪的其余部分,但很可能错误是在名为 newThing() 的方法中引发的。这很奇怪,因为 JSF 已经发现 b:well 是由 net.bootsfaces.layout.Well 实现的。换句话说:JSF 设法读取了配置文件,但未能创建对象。我最好的猜测是你的类路径有问题,或者你有一个损坏的 BootsFaces.jar。

我建议您尝试执行new net.bootsfaces.layout.Well() 行进行测试。如果我的理论是正确的,它应该会导致ClassNotFoundException

另一种可能性是您的运行时环境。你使用 Spring Boot 吗?这个理论是由一位巴西开发商提出的。也许这会导致错误。

与此同时,我们的错误跟踪器上有两张票:https://github.com/TheCoder4eu/BootsFaces-OSP/issues/188https://github.com/TheCoder4eu/BootsFaces-OSP/issues/189

【讨论】:

  • 感谢您的建议。 new net.bootsfaces.layout.Well() 没有抛出任何异常,堆栈跟踪的第一部分是: Grave: JSF1068 : Impossible d'instancier un composant dont le type est net.bootsfaces.layout.Well Grave:严重异常! javax.faces.FacesException: Erreur d'expression : 在 com.sun.faces.application.ApplicationImpl.createComponentApplyAnnotations(ApplicationImpl.java:1912) 在 com.sun.faces 的对象 nommé «net.bootsfaces.layout.Well» 未检测到。 application.ApplicationImpl.createComponent(ApplicationImpl.java:1166)
  • 也就是说已经调用了newThing(),但是返回null。 Bon,c´est vrai,c´est un error 坟墓。此刻,我很困惑。如果您在github.com/stephanrauh/BootsFaces-Examples 尝试我的演示项目之一,会发生什么?例如,github.com/stephanrauh/BootsFaces-Examples/tree/master/…?
  • 可能错误是由您的运行时环境引起的 - 可能是 Spring Boot?
  • 很棒的文章,斯蒂芬!它肯定有助于理解不当行为。 OmniFaces 用户在这里报告了一个非常相似的问题:stackoverflow.com/questions/32327848/…
猜你喜欢
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
相关资源
最近更新 更多