мне нужна ваша помощьEJB, JPA, JSF, почему не может получить новый боб для просмотра
У меня есть 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"; } }
У меня есть базовый сервис дао как этот
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 общественности()
это Шоуда принять новый компонент() для страницы JSF. Итак, где я ошибаюсь? Что я до сих пор не понимаю? Может быть, я использую Hibernate вместо простой JPA? Я использую его (Hibernate) раньше, чем было проще (с HibernateUtil).
PS. Извините за множественный экземпляр «new Component()», но я пытаюсь использовать его везде ...
Хорошо, я меняю его на ViewScoped. И измените с ManagedBean на Named. Оно работает. Мой сценарий работает нормально. Теперь проблема другая, но я опишу ниже. – Tomek
@toldi следует помнить, что область просмотра не работает в JSF 2.1 и ниже в сочетании с Named. Вероятно, вы используете область запроса. –
Я нашел его вчера.
Я прочитал это, и это поможет мне выдержать:
http://germanescobar.net/2010/04/4-areas-of-possible-confusion-in-jee6.html/
Большое спасибо @MikeBraun – Tomek