2011-08-16 29 views
3

我正在使用JSF(2.0)創建一個Web應用程序。 它有「ViewProducts.xhtml」查看帶頁面的產品。每次加載該頁面時,如果參數有一些東西(例如:page = 1(ViewProduct.xhtml?page = 1)),它會自動將該id設置爲該Bean中的setPage屬性。 但是,我要留着收到此錯誤:在JSF中使用Bean(View Scope)顯示數據

Unable to create managed bean categories. The following problems were found: - Bean or property class bean.Categories for managed bean categories cannot be found.

這裏是我的代碼(分類像一個產品容器):

faces-config.xml中:

<faces-config version="2.0" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"> 
<navigation-rule> 
    <from-view-id>/template/header.xhtml</from-view-id> 
    <navigation-case> 
     <from-outcome>ViewCategories</from-outcome> 
     <to-view-id>/ViewCategories.xhtml</to-view-id> 
    </navigation-case> 
</navigation-rule> 

<managed-bean> 
    <managed-bean-name>categories</managed-bean-name> 
    <managed-bean-class>bean.Categories</managed-bean-class> 
    <managed-bean-scope>view</managed-bean-scope> 
</managed-bean> 

ViewProducts.xhtml

xmlns:c="http://java.sun.com/jsp/jstl/core" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:f="http://java.sun.com/jsf/core" 



<f:metadata> 
    <f:viewParam name="page" value="#{categories.page}"/> 
</f:metadata> 

<h:dataTable value="#{categories.listProduct}" var="cus"> 
    <h:column> 
     <f:facet name="header">Name</f:facet> 
     <h:outputText value ="#{cus.name}"></h:outputText> 
    </h:column> 
    <h:column> 
     <f:facet name="header">Price</f:facet> 
     <h:outputText value ="#{cus.price}"></h:outputText> 
    </h:column> 
</h:dataTable> 

Categories.java(ManagedBean)

public class Categories implements Serializable {  
    /** Creates a new instance of categories */ 
    public Categories() { 
    } 
    private int page = 0; 

    public int getPage() { 
     return page; 
    } 

    public void setPage(int page) { 
     this.page = page; 
    } 
    public List<Product> listProduct = null; 

    public List<Product> getListProduct() { 
     if (listProduct != null) { 
      return listProduct; 
     } else { 
      listProduct = dataAccess.DataAccess.getCategories(this.page); 
      return listProduct; 
     } 
    } 

    public void setListProduct(List<Product> listProduct) { 
     this.listProduct = listProduct; 
    } 
} 

堆棧跟蹤:

com.sun.faces.mgbean.ManagedBeanCreationException: Unable to create managed bean categories. The following problems were found: 
    - Bean or property class bean.Categories for managed bean categories cannot be found. 
    - Bean or property class bean.Categories for managed bean categories cannot be found. 
    - Bean or property class bean.Categories for managed bean categories cannot be found. 
    - Bean or property class bean.Categories for managed bean categories cannot be found. 
    at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:263) 
    at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:86) 
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) 
    at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72) 
    at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:69) 
    at org.apache.el.parser.AstValue.getValue(AstValue.java:112) 
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) 
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:102) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178) 
    at javax.faces.component.UIData.getValue(UIData.java:554) 
    at javax.faces.component.UIData.getDataModel(UIData.java:1248) 
    at javax.faces.component.UIData.setRowIndex(UIData.java:447) 
    at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81) 
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:823) 
    at javax.faces.component.UIData.encodeBegin(UIData.java:937) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1611) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:662) 
+0

請不要在標題中加入「已解決」。這不是一個討論論壇。只需標記接受的答案(你已經做到了)。已接受答案的問題在列表中顯示爲不同的答案數顏色(黃色而不是白色)。這足以將「解決的問題」與「未解決的問題」區分開來。 – BalusC

回答

3

至少有3個問題:

  1. bean類bean.Categories我不在類路徑中。

  2. 您不能擁有一個託管屬性,它的範圍比託管bean的範圍窄。

  3. 您使用<f:viewParam>複製託管屬性。

確保bean類位於類路徑中,並且未輸入托管bean類。您還需要擺脫<managed-property>,如果您已經使用<f:viewParam>,則不需要它。

與問題無關,但由於您已經在JSF2上,我還建議使用註釋而不是faces-config.xml

+0

感謝您回答我這麼快。 1.我有一個名爲** bean **的數據包。它包含項目根目錄中的** Categories.java **(ManagedBean)。 3.我在配置文件中刪除了。 ** - >它仍然有這個問題。** 2.我不知道,你能擴展更多的ABT嗎? 4.我使用該文件來保存導航規則。我使用註釋搜索它,但我找不到那樣的東西。我怎樣才能解決這個問題? – BachT

+0

再次讀取堆棧跟蹤。張貼最下面的「引起」部分。 – BalusC

+0

com.sun.faces.mgbean。ManagedBeanCreationException:無法創建託管bean類別。發現以下問題: - Bean或屬性類bean。無法找到託管bean類別的類別.at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:263) – BachT