【问题标题】:How to refer to a property outside war using JSF 2 EL?如何使用 JSF 2 EL 引用战争之外的财产?
【发布时间】:2011-12-17 03:22:03
【问题描述】:

(环境:带有 Facelets 的 JSF 2、JBoss 6、EJB 3、)

我在 EAR 项目中有一个 WAR。是否可以在 Ear.jar 中引用其他 JAR 文件中的类属性。我的意思是,#{managedBean.anotherClass.yetAnother.property} 是否有效,其中 managedBean 位于 View.war 的 WEB-INF/classes 内,而 AnotherClassYetAnother 类位于 Another.jar 中?

BigProject.ear 
       |
       +  Another.jar
       +  View.war

如果它是有效的,那么你能给我提示什么会引发 PropertyNotFoundException 吗?需要什么配置吗?

尝试从关闭中保存问题: 我的场景与@BalusC 在 cmets 中提到的场景有所不同。在那里,他/她很想引用托管 bean,而在我的情况下,托管 bean 仍在同一场战争中,我正在寻找另一个 jar 中的普通 POJO 属性。

[编辑]
好的,所以这是完全的例外。 PojoOne 类没有属性,但它有一个方法“getPojoCustomer()”

2011-10-28 16:50:33,996 SEVERE  [javax.enterprise.resource.webcontainer.jsf.application] (http-0.0.0.0-8080-1) Error Rendering View[/startup.xhtml]: javax.faces.FacesException: javax.el.PropertyNotFoundException: /startup.xhtml @24,177 itemLabel="#{pojoOne.getPojoCustomer().getOrganisationId()}": The class 'org.example.PojoOne' does not have the property 'getPojoCustomer'.
    at javax.faces.component.UIComponentBase$AttributesMap.get(UIComponentBase.java:2228)
    at org.primefaces.renderkit.InputRenderer.getSelectItems(InputRenderer.java:69)
    at org.primefaces.component.selectonelistbox.SelectOneListboxRenderer.encodeSelectItems(SelectOneListboxRenderer.java:124)
    at org.primefaces.component.selectonelistbox.SelectOneListboxRenderer.encodeInput(SelectOneListboxRenderer.java:107)
    at org.primefaces.component.selectonelistbox.SelectOneListboxRenderer.encodeMarkup(SelectOneListboxRenderer.java:69)
    at org.primefaces.component.selectonelistbox.SelectOneListboxRenderer.encodeEnd(SelectOneListboxRenderer.java:50)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:879)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1650)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:164)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:60)
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:48)
    at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:879)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1650)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:389)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:127)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:117)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181)
    at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285)
    at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:159)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951)
    at java.lang.Thread.run(Thread.java:662)
Caused by: javax.el.PropertyNotFoundException: /startup.xhtml @24,177 itemLabel="#{pojoOne.getPojoCustomer().getOrganisationId()}": The class 'org.example.PojoOne' does not have the property 'getPojoCustomer'.
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:108)
    at javax.faces.component.UIComponentBase$AttributesMap.get(UIComponentBase.java:2226)
    ... 42 more

【问题讨论】:

  • 感谢 BalusC,但我的托管 bean 与上述问题不同。但它指的是另一个 jar 中的一个类。这意味着,AnotherClass 或 YetAnother 类中没有特定于 JSF 的代码或注释。
  • 哦。然后我对你的具体问题感到困惑。请发布异常消息和跟踪。现在看起来您根本没有实例化任何嵌套属性(JSF/EL 不会为您执行此操作),并且打包类的方式并不重要。

标签: java jsf-2 facelets el war


【解决方案1】:

javax.faces.FacesException: javax.el.PropertyNotFoundException: /startup.xhtml @24,177 itemLabel="#{pojoOne.getPojoCustomer().getOrganisationId()}": 类 'org.example.PojoOne' 没有属性“getPojoCustomer”。

您应该按如下方式访问属性:

itemLabel="#{pojoOne.pojoCustomer.organisationId}"

【讨论】:

  • 任何人都应该记住命名约定。如果您有名为 PCustomer 的属性,它将被称为 PCustomer 而不是 pCustomer
猜你喜欢
  • 2021-10-05
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2013-06-24
  • 2016-03-19
相关资源
最近更新 更多