2013-06-01 53 views
1

我是jpa和jsf的新手。我正在嘗試使用jpa和jsf開發簡單的Web應用程序。我已經安裝了mysql並配置了Glassfish來使用它。我創建了一個小項目,它由一個Managed Bean和一個JPA實體組成。在部署時,數據庫中的表成功創建,因此與數據庫的連接正常。但我有一個問題,我cant't堅持任何實體在Managed Bean的方法:JPA:不能堅持託管Bean中的實體

@ManagedBean(name = "data") 
@SessionScoped 
public class Data implements Serializable { 

    @PersistenceUnit(unitName = "JChatPU") 
    EntityManagerFactory emf; 

    @Resource 
    UserTransaction utx; 

    public Data() { 
    } 

    public void add() { 
     EntityManager em = emf.createEntityManager(); 
     try { 
      utx.begin(); 
      JChatUser u = new JChatUser(); 
      em.persist(u); 
      utx.commit(); 
     } 
     catch(Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

我的持久化單元配置在persistence.xml中:

<persistence-unit name="JChatPU" transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>jdbc/jchatdb</jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 
    </properties> 
    </persistence-unit> 

但我可以成功地從EJB堅持。那麼,如何堅持從託管bean的方法?

感謝您的未來答案。

+0

你不得到任何異常? – Salem

+0

不,沒有例外! – tegoo

+1

您已確認調用了bean方法? – kolossus

回答

1

我已經解決了這個問題!

的問題是在我稱之爲bean方法的方式:

<h:commandButton id="add" value="add" action="#{data.add()}" /> 

它不工作,因爲我們需要plase形式命令按鈕:

<h:form> 
    <h:commandButton id="add" action="#{data.meth()}" value="add"/> 
</h:form>