gpt4 book ai didi

java - 为什么 JSF 输出没有更新以反射(reflect)数据库中的更改?

转载 作者:太空宇宙 更新时间:2023-11-04 06:55:53 25 4
gpt4 key购买 nike

我使用 JSF 作为我的前端技术。我有一个在表格上显示的位置列表。我有一个删除命令按钮,它成功地从数据库中删除所选条目(通过调用托管 bean 中的 deleteLocation 方法),然后刷新 JSF 页面。尽管数据库正确更新,但 JSF 页面不显示更新的结果。我不确定问题是什么,因为该表是从数据库条目生成的并且数据库已成功更改。这是我的代码。感谢您的帮助或建议!

<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,这将创建一个 List 并返回它。因此,通过调用 this.getLocaitonList() ,它绝对不会执行任何操作。这就像单独说 new String("Hello"); 而不将其分配给任何东西。

应该做的是将您的List bean字段分配给deleteLocation方法中的getLocationList。类似的东西

em.getTransaction().commit();
em.close();
//this.getLocaitonList();
locationList = getLicationList();
return "delete";
<小时/>

旁注

您应该考虑使用三层设计

  • Web 层(JSF 托管 Bean)
  • 业务层 (EJB)
  • 持久层 (JPA)

关于java - 为什么 JSF 输出没有更新以反射(reflect)数据库中的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22751390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com