在我正在构建的应用程序中,我从数据库加载数据,将其显示在p:dataGrid
中,用户可以在其中编辑某些值。编辑完成后,用户将点击" Save"按钮,它将编辑的值存储在数据库中。
我写了一个工作正常的解决方案,但经过一些重新发布和/或服务器重启后,我开始在TransactionRequiredException
方法的myEntityFacade.edit(item)
处获得saveAction()
。
在View.xhtml
:
<p:dataGrid id="itemGrid" var="item"
value="#{myController.itemList}" columns="6"
layout="grid" style="width:100%">
<p:panel style="text-align:center;width:100%">
<!-- Displaying data -->
</p:panel>
</p:dataGrid>
<p:commandButton value="Save" id="saveBtn"
action="#{myController.saveAction}"
styleClass="ui-priority-primary" />
在MyController.java
:
@ManagedBean(name = "myController")
@SessionScoped
public class MyController {
@Inject
private MyEntityFacade myEntityFacade;
private List<MyEntity> itemList;
... Constructor and other member declarations
@PostConstruct
public void init() {
itemList = myEntityFacade.findAll();
}
public void saveAction() {
for(MyEntity item : itemList) {
myEntityFacade.edit(item);
}
}
... Getters and Setters
}
在MyEntityFacade.java
:
@Stateless
public class MyEntityFacade {
@PersistenceContext(unitName = "MyPU")
private EntityManager em;
public List<MyEntity> findAll() {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
cq.select(cq.from(MyEntity.class));
return em.createQuery(cq).getResultList();
}
public void edit(MyEntity entity) {
em.merge(entity);
}
}
我是否应该使用PrimeFaces和/或JPA?可能是TransactionRequiredException
的原因是什么?
其他信息:
答案 0 :(得分:0)
如果具有此类设置,则在perisistence.xml <persistence-unit name="MyPU" transaction-type="JTA">
和应用程序服务器数据源中启用JTA。