Java 为什么JSF输出没有更新以反映数据库中的更改?
我使用JSF作为我的前端技术。我有一个在桌子上显示的位置列表。我有一个DeleteCommandButton,它通过调用托管bean中的deleteLocation方法成功地从数据库中删除所选条目,然后刷新JSF页面。虽然数据库更新正确,但JSF页面不会显示更新的结果。我不确定问题出在哪里,因为表是从数据库条目生成的,并且数据库已成功更改。这是我的密码。谢谢你的帮助和建议Java 为什么JSF输出没有更新以反映数据库中的更改?,java,jsf,Java,Jsf,我使用JSF作为我的前端技术。我有一个在桌子上显示的位置列表。我有一个DeleteCommandButton,它通过调用托管bean中的deleteLocation方法成功地从数据库中删除所选条目,然后刷新JSF页面。虽然数据库更新正确,但JSF页面不会显示更新的结果。我不确定问题出在哪里,因为表是从数据库条目生成的,并且数据库已成功更改。这是我的密码。谢谢你的帮助和建议 <tr> <td><div class="white"><H2&g
<tr>
<td><div class="white"><H2>Work Locations</H2></div>
<div class="tables"><h:dataTable value="#{locationsBean.locationsList}" var="l" border="1">
<div class="td"><h:column>
<div class="th"><f:facet name="header">
<div class="generaltext3">County</div>
</f:facet></div>
<div class="generaltext2">#{l.countyName}</div>
</h:column></div>
<div class="td"><h:column>
<div class="th"><f:facet name="header">
<div class="generaltext3">Action</div>
</f:facet></div>
<div class="centrebutton"><h:commandButton id="delete" class="myButton2" value="delete" action="#{locationsBean.deleteLocation(l.location_id)}">
</h:commandButton></div>
</h:column></div>
</h:dataTable></div>
</td>
</tr>
下面是Java代码
public List<Locations> getLocationsList() {
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
EntityManager em = factory.createEntityManager();
List<Locations> locationsList = new ArrayList<Locations>();
em.getTransaction().begin();
String sessionEmail=Util.getEmail();
Query myQuery = em.createQuery("SELECT u FROM BusinessAccount u WHERE u.email=:email");
myQuery.setParameter("email", sessionEmail);
List<BusinessAccount> userList=myQuery.getResultList();
BusinessAccount account =userList.get(0);
locationsList=account.getLocations();
em.getTransaction().commit();
em.close();
return locationsList;
}
public String deleteLocation(int id) {
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Query myQuery = em.createQuery("SELECT l FROM Locations l WHERE l.location_id=:locationId");
myQuery.setParameter("locationId", id);
List<Locations> currentLocation=myQuery.getResultList();
String countyName=currentLocation.get(0).getCountyName();
em.remove(currentLocation.get(0));
em.getTransaction().commit();
em.close();
this.getLocationsList();
return "delete";
}
在deleteLocation方法中,调用getLocationList,它创建一个新列表并返回它。因此,通过调用this.getLocationList,它完全不起任何作用。这就像说一声新的问候;所有这些都是自己的,而不是分配给任何东西
您应该做的是在deleteLocation方法中将列表bean字段分配给getLocationList。差不多
em.getTransaction().commit();
em.close();
//this.getLocaitonList();
locationList = getLicationList();
return "delete";
旁注
你应该考虑使用三层设计
Web层JSF托管Bean 业务层EJB 持久层JPA您发布的HTML不是有效的XHTML。Second没有结束对应项。该div在标记之后结束。我的代码解决了在db被更改后更新jsf页面的问题,因此不确定您所说的不是xhtml是什么意思。谢谢你的帮助。我肯定会按照你说的做三层设计。你给出的解决方案没有解决我的问题,但谢谢你的尝试。最后你终于明白了。将在回答中显示它。
public List<Locations> getLocationsList() {
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
String sessionEmail=Util.getEmail();
Query myQuery = em.createQuery("SELECT u FROM BusinessAccount u WHERE u.email=:email");
myQuery.setParameter("email", sessionEmail);
List<BusinessAccount> userList=myQuery.getResultList();
BusinessAccount account =userList.get(0);
//This line refreshes the account object with the new values from the database and solves the problem that I was having
em.refresh(account);
locationsList=account.getLocations();
em.getTransaction().commit();
em.close();
return locationsList;
}