2011-10-28 40 views
0

(環境:JSF 2與Facelets的時,JBoss 6,EJB 3,)
如何使用JSF 2 EL引用戰爭外的財產?

我有一個EAR項目內的WAR。是否可以引用Ear中其他JAR文件中類的屬性?我的意思是,#{managedBean.anotherClass.yetAnother.property}有效,其中managedBean位於View.war的WEB-INF/classes類中,類AnotherClassYetAnother位於Another.jar中?

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

如果它是有效的,那麼你能給我提示什麼可以引發PropertyNotFoundException?是否需要配置?

嘗試保存關閉的問題: 我的情景與@BalusC評論中提到的情景之間存在差異。在那裏,他/她正在引用託管bean,而在我的情況下託管bean仍然在同一場戰爭中,我正在尋找一個正常的POJO屬性,它位於另一個jar中。

[編輯]
好的,所以這裏是完整的例外。類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 
+0

可能重複[?如何引用JSF的JAR文件管理豆(http://stackoverflow.com/questions/7663818/how -to-reference-jsf-managed-beans-in-a-jar-file) – BalusC

+0

非常感謝BalusC,但是我的託管bean與上面的問題不一樣。但它指的是另一個罐子裏的一個班級。這意味着,在AnotherClass或YetAnother類中沒有特定的JSF代碼或註釋。 – anergy

+0

哦。然後我對你的具體問題感到困惑。請發佈異常消息和跟蹤。現在開始看起來你只是沒有實例化任何嵌套的屬性(JSF/EL不會爲你做這件事),你如何打包這些類並不重要。 – BalusC

回答

0

javax.faces.FacesException:javax.el.PropertyNotFoundException:/startup.xhtml @ 24177 itemLabel = 「#{pojoOne.getPojoCustomer()。getOrganisationId()}」:類org.example.PojoOne沒有屬性getPojoCustomer。

您應按如下方式訪問屬性:

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

只爲其他人尋找,應該記住命名約定。如果您擁有名爲PCustomer的財產,它將被稱爲PCustomer而不是pCustomer – anergy