1
我需要你的幫助EJB,JPA,JSF爲什麼不能得到一個新的bean查看
我有一個ManagedBean
@ManagedBean @SessionScoped public class ComponentController implements Serializable { private static final long serialVersionUID = 373631006594351707L; @EJB IComponentService componentService; @EJB IDocumentService documentService; private Component component; private DocumentEntity document; public String createAndClose() { componentService.save(component); FacesMessage msg = new FacesMessage("Component added.", null); FacesContext.getCurrentInstance().addMessage(null, msg); component = new Component(); return "components"; } public String saveAndClose() { componentService.update(component); FacesMessage msg = new FacesMessage("Component updated.", null); FacesContext.getCurrentInstance().addMessage(null, msg); component = new Component(); return "components"; } public String createView() { component = new Component(); return "create"; } }
我有這樣
泛型DAO服務public abstract class GenericJpaService<T extends BaseEntity, ID extends Serializable> implements IGenericService<T, ID> { @PersistenceContext EntityManager em; private Class<T> persistentClass; public GenericJpaService() { } public GenericJpaService(Class<T> persistentClass) { this.persistentClass = persistentClass; } public Class<T> getPersistentClass() { return persistentClass; } public void setPersistentClass(Class<T> persistentClass) { this.persistentClass = persistentClass; } @Override public T save(T entity) { this.em.persist(entity); this.em.flush(); this.em.refresh(entity); Logger.getLogger(GenericJpaService.class.getName()).log(Level.INFO, "Object {0} saved to DB", entity); return entity; } @Override @SuppressWarnings("unchecked") public T update(T entity) { Logger.getLogger(GenericJpaService.class.getName()).log(Level.INFO, "Object {0} updated in DB", entity); return (T) this.em.merge(entity); } ... }
所以,當我運行應用程序第一次我點擊一些鏈接添加組件。它執行:
公共字符串CreateView的()
- 我添加有一些數據+上傳一些文件等...
- 然後我點擊保存並關閉按鈕。它執行:
公共字符串createAndClose()
- 成功是我的數據保存到數據庫中。
這是一個問題,當我再次做它顯示我以前保存的數據。我調試它,但我不明白它在哪裏設置。之後
公共字符串CreateView的()
它768,16採取新的組件()對JSF頁面。 那麼,我犯了一個錯誤?我還是不明白?也許我應該使用Hibernate而不是普通的JPA?我之前使用它(Hibernate),因此更容易(使用HibernateUtil)。
PS。對不起,「新的組件()」的多個實例,但我試圖把它無處不在...
好的,我將它改爲ViewScoped。然後從ManagedBean更改爲Named。有用。我的場景工作正常。現在問題是不同的,但我會把下面的描述。 – Tomek
@toldi請注意,視圖作用域在JSF 2.1及以下版本中與Named組合不起作用。您現在可能正在使用請求範圍。 –
我昨天找到了。
我讀過這個,它幫助我不再延遲:
http://germanescobar.net/2010/04/4-areas-of-possible-confusion-in-jee6。html/
非常感謝@MikeBraun – Tomek