2013-07-24 91 views
0

而深化發展,我得到這個錯誤我的應用程序JSF:未找到方法

javax.el.MethodNotFoundException: /test.xhtml @18,99 
action="#{ComplexeController.saveComplexe}": Method not found: 
[email protected]() 

test.xhtml:

<h:body> 
<h1>Génération des Complexes</h1> 
<h:form> 
    Nom Complexe: <h:inputText value="#{ComplexeController.complexe.nomComp}"/><br/> 
    Nom Zone: <h:selectOneMenu id="nomZone" value="#{ComplexeController.complexe.zoneParc}" converter="#{GenericConverter}"> 
     <f:selectItems value="#{ZoneController.remplireItem()}"/> 
</h:selectOneMenu> 
<br/> 
<h:commandButton action="#{ComplexeController.saveComplexe}" value="Insérer un nouveau complexe"/> 
<h:commandButton action="#{ComplexeController.updateComplexe}" value="Modifier un complexe"/> 
<br/> 
<h:commandLink action="complexe" value="acceuil"/> 
</h:form> 
</h:body> 

實體Complexe.java

import java.util.HashSet; 
import java.util.Set; 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 

/** 
* Complexe generated by hbm2java 
*/ 
@Entity 
@Table(name="COMPLEXE" 
    ,schema="PROJET" 
) 
public class Complexe implements java.io.Serializable { 


    private String nomComp; 
    private ZoneParc zoneParc; 
    private Set<Parc> parcs = new HashSet<Parc>(0); 

    public Complexe() { 
    } 


    public Complexe(String nomComp) { 
     this.nomComp = nomComp; 
    } 
    public Complexe(String nomComp, ZoneParc zoneParc, Set<Parc> parcs) { 
     this.nomComp = nomComp; 
     this.zoneParc = zoneParc; 
     this.parcs = parcs; 
    } 

    @Id 

    @Column(name="NOM_COMP", unique=true, nullable=false, length=30) 
    public String getNomComp() { 
     return this.nomComp; 
    } 

    public void setNomComp(String nomComp) { 
     this.nomComp = nomComp; 
    } 
@ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="NOM_ZONEE") 
    public ZoneParc getZoneParc() { 
     return this.zoneParc; 
    } 

    public void setZoneParc(ZoneParc zoneParc) { 
     this.zoneParc = zoneParc; 
    } 
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="complexe") 
    public Set<Parc> getParcs() { 
     return this.parcs; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (nomComp != null ? nomComp.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof Complexe)) { 
      return false; 
     } 
     Complexe other = (Complexe) object; 
     if ((this.nomComp == null && other.nomComp != null) || (this.nomComp != null && !this.nomComp.equals(other.nomComp))) { 
      return false; 
     } 
     return true; 
    } 

    public void setParcs(Set<Parc> parcs) { 
     this.parcs = parcs; 
    } 
} 

現在ComplexeDaoImpl.java

import config.HibernateUtil; 
    import fr.code.parc.model.Complexe; 
    import java.util.List; 
    import org.hibernate.Session; 
    import org.hibernate.Transaction; 

    /** 
    * 
    * @author raddaouirami 
    */ 
    public class ComplexeDaoImpl implements ComplexeDao{ 

     @Override 
     public List<Complexe> list() { 
      Session session = HibernateUtil.getSessionFactory().openSession(); 
      Transaction t = session.beginTransaction(); 
      List complexes = session.createQuery("from Complexe").list(); 
      t.commit(); 
      return complexes; 
     } 

     @Override 
     public Complexe getComplexe(String nomComp) { 
      Session session = HibernateUtil.getSessionFactory().openSession(); 
      return (Complexe) session.load(Complexe.class, nomComp); 
     } 

     @Override 
     public void save(Complexe complexe) { 
      Session session = HibernateUtil.getSessionFactory().openSession(); 
      Transaction t = session.beginTransaction(); 
      session.save(complexe); 
      t.commit(); 
     } 

     @Override 
     public void update(Complexe complexe) { 
      Session session = HibernateUtil.getSessionFactory().openSession(); 
      Transaction t = session.beginTransaction(); 
      session.update(complexe); 
      t.commit(); 
     } 

     @Override 
     public void remove(Complexe complexe) { 
      Session session = HibernateUtil.getSessionFactory().openSession(); 
      Transaction t = session.beginTransaction(); 
      session.delete(complexe); 
      t.commit(); 
     } 


    } 

和最後ComplexeController.java

import fr.code.parc.dao.ComplexeDao; 
import fr.code.parc.dao.ComplexeDaoImpl; 
import fr.code.parc.model.Complexe; 
import java.util.List; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import javax.faces.model.DataModel; 
import javax.faces.model.ListDataModel; 

/** 
* 
* @author raddaouirami 
*/ 

@ManagedBean 
@SessionScoped 
public class ComplexeController { 

    private Complexe complexe; 
    private DataModel listeComplexes; 
    private int selectedItemIndex; 


    /** 
    * Creates a new instance of ComplexeController 
    */ 
    public ComplexeController() { 
     complexe = new Complexe(); 
    } 
    /* public Complexe getSelected() { 
     if (complexe == null) { 
      complexe = new Complexe(); 
      selectedItemIndex = -1; 
     } 
     return complexe; 
    }*/ 

    public DataModel getListeComplexes() { 
     List<Complexe> liste = new ComplexeDaoImpl().list(); 
     listeComplexes = new ListDataModel(liste); 
     return listeComplexes; 
} 

    /** 
    * @return the complexe 
    */ 
    public Complexe getComplexe() { 
     return complexe; 
    } 

    /** 
    * @param complexe the complexe to set 
    */ 
    public void setComplexe(Complexe complexe) { 
     this.complexe = complexe; 
    } 


    public String preparationAddComplexe(){ 
     setComplexe(new Complexe()); 
     return "test"; 
} 
    public String preparationEditComplexe(){ 
     setComplexe((Complexe)(getListeComplexes().getRowData())); 
     return "test"; 
} 

    public String DeleteComplexe(){ 
     Complexe complexes = (Complexe)(getListeComplexes().getRowData()); 
     ComplexeDao dao = new ComplexeDaoImpl(); 
     dao.remove(complexes); 
     return "complexe"; 
    } 
    public String SaveComplexe(){ 
     ComplexeDao dao = new ComplexeDaoImpl(); 
     dao.save(getComplexe()); 
     return "complexe"; 
    } 
    public String UpdateComplexe(){ 
     ComplexeDao dao = new ComplexeDaoImpl(); 
     dao.update(complexe); 
     return "complexe"; 
    }  
} 

我怎樣才能解決呢?

+0

可以加載你的頁面?或者當您點擊按鈕時發生? – danRod

+2

請記住通過單擊所提供答案旁邊的大0中的複選標記來接受該問題。 – Andy

+2

不要忘記接受答案。其他用戶不應該閱讀您的回答問題。 – erencan

回答

5

鑑於你調用saveComplexe

action="#{ComplexeController.saveComplexe}" 

ComplexeController只有SaveComplexe方法。

要麼改變

action="#{ComplexeController.SaveComplexe}" 

或重命名ComplexeController方法saveComplexe

+1

如果答案幫助你設置它接受http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – shevchyk

0

2解決方案:
溶液1
變化test.xhtml:complexeController.saveComplexe [注意complexeController中的首字母小寫]

<h:commandButton action="#{complexeController.saveComplexe}" value="Insérer un nouveau complexe"/> 
<h:commandButton action="#{complexeController.updateComplexe}" value="Modifier un complexe"/> 

解決方案2.
變化ComplexeController.java:

@ManagedBean(name="ComplexeController ") 
@SessionScoped 
public class ComplexeController { 
.... 
} 

閱讀下列信息有關JSF配置ManagedBeans:

有2種方式使用@ManagedBean到將Java Bean類公開給Managed Bean類。

路1

@ManagedBean 
public class ComplexeController{ 
.... 
} 

在這種情況下,用相同的名字,但第一個字母露出豆較小的情況下,即可以在一個facelet作爲訪問豆

#{complexeController} 

方式2.

@ManagedBean(name="myBean") 
public class ComplexeController{ 
.... 
} 

在這種情況下,與第一個字母相同的名稱暴露的bean是較小的情況下,我。例如,你可以在一個facelet作爲

#{myBean} 
+2

豆不是問題。異常說,找到bean,但方法不是。 – BalusC

0

嘗試第一個字符訪問ManagedBean低的情況下 例如訪問豆

action="#{complexeController.saveComplexe}" 

代替

action="#{ComplexeController.saveComplexe}"