2012-11-07 45 views
0

我正在處理小項目,並且在所有事情都正常工作後,突然間我開始得到一個javax.el.PropertyNotFoundException:,但我仍然沒有發現問題,唯一改變的是我對其最後的工作版本之間的代碼做了一個新的xhtml文檔,它稱爲categoryController。我不知道發生了什麼,也不知道如何解決這個問題。有沒有人有一個想法如何解決這個問題?javax.el.PropertyNotFoundException使用jsf,jpa,Java EE

我做了一些研究,發現添加beans.xml,但是,我確實有問題發生之前的beans.xml。這是beans.xml中的內容:

<?xml version="1.0" encoding="UTF-8"?> 
<beans 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/beans_1_0.xsd"> 
</beans> 

這是categoryController豆:

@Named 
@RequestScoped 
public class CategoryController { 

    @EJB 
    private CategoryEJB categoryEjb; 

    private Category category = new Category(); 
    private List<Category> categories = new ArrayList<Category>(); 

    // ------------------------------------------------------------- Constructor 

    public CategoryController() { 
    } 

    // -------------------------------------------------------- Business Methods 

    public String doCreateCategory() 
    { 
     category = categoryEjb.createCategory(category); 
     categories = categoryEjb.findAllCategory(); 
     return "listCategory?faces-redirect=true"; 
    } 

這是被稱爲形式:

<h:form> 
       <h1><h:outputText value="Create New Catergory"/></h1> 
       <h:panelGrid columns="2">      
        <h:outputLabel value="Name:" for="name" /> 
        <h:inputText id="name" value="#{categoryController.category.name}" title="Name" /> 
        <h:outputLabel value="Description:" for="description" /> 
        <h:inputText id="description" value="#{categoryController.category.description}" title="Description" />      
       </h:panelGrid> 
       <h:commandButton value="Create Category" action="#{categoryController.doCreateCategory()}"/>     
      </h:form> 

這是完整的棧我得到:

javax.el.PropertyNotFoundException: /product/createCategory.xhtml @15,103 value="#{categoryController.category.name}": Target Unreachable, identifier 'categoryController' resolved to null 
    at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95) 
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030) 
    at javax.faces.component.UIInput.validate(UIInput.java:960) 
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1233) 
    at javax.faces.component.UIInput.processValidators(UIInput.java:698) 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) 
    at javax.faces.component.UIForm.processValidators(UIForm.java:253) 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) 
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172) 
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:722) 

編輯:

@Entity 
@NamedQueries({ 
    @NamedQuery(name= "findAllCategory", query="SELECT c FROM Category c") 
}) 
public class Category implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    @Id @GeneratedValue(strategy= GenerationType.AUTO) 
    private int category_id; 
    private String name; 
    private String description; 
    @OneToMany(mappedBy = "category_fk") 
    private List<Product> product_fk; 

    // ------------------------------------------------------------- Constructor 

    public Category() { 
    } 

    public Category(String name, String description, List<Product> product_fk) { 
     this.name = name; 
     this.description = description; 
     this.product_fk = product_fk; 
    }  

    // ---------------------------------------------------- Getters and Setters 

    public int getCategory_id() { 
     return category_id; 
    } 

    public void setCategory_id(int category_id) { 
     this.category_id = category_id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public List<Product> getProduct_fk() { 
     return product_fk; 
    } 

    public void setProduct_fk(List<Product> product_fk) { 
     this.product_fk = product_fk; 
    }  
+1

你在混淆CDI和JSF。使用'@ ManagedBean'而不是'@ Named'並確保'@ ManagedBean'和'@ RequesScoped'來自'javax.faces.bean'包。 –

+0

從您的課堂中導入的'@ RequestScoped'包是什麼? – kolossus

+0

@kolossus這個包是'import javax.enterprise.context.RequestScoped;' – lv10

回答

0

異常說,你的bean的屬性找不到。你有沒有正確的和可見的getter/setter方法在bean中的類別和類別對象中的字段名稱?

編輯:

我剛纔看到的,PropertyNotFoundException確實提到過這個bean本身,而不是在豆田。你的豆有名字嗎?您的@Named應該是類似於@Named(「categoryController」)的內容。

+0

感謝您的回覆。是的,我有正確的getter/setter。這是更令人困惑的。我已經用類別實體更新了我的問題。 – lv10

+0

我更新了我的答案,因爲我第一次誤讀了堆棧跟蹤。 – Volker

+0

再次感謝。最初它並沒有,但是,我只是試圖包括名稱,但它也不起作用,我得到了相同的堆棧。 – lv10