如何使用JSTL、JPA、EJB、JSP、Servlet更新和删除JavaEE中的记录
我已设法将数据持久保存到数据库中,但无法更新数据和删除数据。我想我走错了路,或者有些事情需要解决。我自己也在学习JavaEE,学习来自Netbeans的JavaEE电子商务教程。我已经学习了所有课程,现在向这个应用程序添加了一些功能,使其成为现实世界的应用程序,因为这个示例课程缺少很多东西,但直到现在,我才能够将数据持久保存到db。 在这里,我想知道如何修复它,以及如何更好地使其工作 这是带有删除和更新按钮的阅读部分。它能够显示来自MySQL的数据列表如何使用JSTL、JPA、EJB、JSP、Servlet更新和删除JavaEE中的记录,jsp,jakarta-ee,servlets,jpa,ejb,Jsp,Jakarta Ee,Servlets,Jpa,Ejb,我已设法将数据持久保存到数据库中,但无法更新数据和删除数据。我想我走错了路,或者有些事情需要解决。我自己也在学习JavaEE,学习来自Netbeans的JavaEE电子商务教程。我已经学习了所有课程,现在向这个应用程序添加了一些功能,使其成为现实世界的应用程序,因为这个示例课程缺少很多东西,但直到现在,我才能够将数据持久保存到db。 在这里,我想知道如何修复它,以及如何更好地使其工作 这是带有删除和更新按钮的阅读部分。它能够显示来自MySQL的数据列表 <c:if test="${!emp
<c:if test="${!empty categoryList}">
<h2>Category List</h2>
<table class="table">
<tr>
<th>Category Id:</th>
<th>Category Name:</th>
<th>Edit</th>
<th>Delete</th>
</tr>
<c:forEach var="category" items="${categoryList}" varStatus="iter">
<tr>
<td>${category.id}</td>
<td>${category.name}</td>
<td><a class="btn btn-danger" alt="Update" href='updateCategory.jsp?id=<c:out value="${category.id}"/>'><i class="fa fa-cut"></i></a></td>
<td><a class="btn btn-danger" alt="Delete" href='deleteCategory.jsp?action=delete&id=<c:out value="${category.id}"/>'><i class="fa fa-cut"></i></a></td>
</tr>
</c:forEach>
</table>
</c:if>
从CategoryManager.java更新和删除部件
public Category updateCategory(String name) {
//public Category updateCategory(String name, int category_id) {
Category category = new Category();
category.setName(name);
//category.setId(category_id);
em.merge(category);
return category;
}
public Category deleteCategory(int id){
Category category = new Category();
category.setId(id);
em.remove(category);
return category;
}
没有用于调用删除的代码,因此请确保实际调用了CategoryManager的deleteCategory 但除此之外,守则还应包括:
public Category deleteCategory(int id){
Category category = em.find(Category.clas,id);
em.remove(category);
return category;
}
对于更新,您需要知道要更新的类别的id
public Category updateCategory(int id, String name) {
Category category = em.find(Category.class,id);
category.setName(name);
return category;
}
这两个方法都必须在事务上下文中调用,但如果您使用Java EE,它会得到处理(如果不是,您需要调用
em.getTransaction().begin()
…em.getTransaction().commit()
)实际上代码是正确的,但正如我之前猜测的那样,在我的AdminServlet中缺少的是一件小事。
实际上,url模式丢失了
urlPatterns = {
"/admin/",
"/admin/viewOrders",
"/admin/viewCustomers",
"/admin/customerRecord",
//"/admin/customerOrder",
"/admin/orderRecord",
"/admin/logout",
"/admin/showProduct",
"/admin/showCategory",
"/admin/addCategory",
"/admin/addCategory.jsp",
"/admin/updateCategory",
"/admin/addProduct",
"/admin/addProduct.jsp",
"/admin/deleteProduct.jsp",
"/admin/deleteProduct"
})
尽管上面提到了categoryManager的另一种方式,但它也可以工作
public Category updateCategory(Category category, String name){
category.setName(name);
em.merge(category);
return category;
}
您已经提到id是一个参数
updateCategory.jsp?id=
,但在方法中使用category\u id
作为参数,如request.getParameter(“category\u id”)代码>在AdminServletya中,我在id部分出错。我认为对于更新部分,我们需要em.merge(category)。你忘了还是没有必要?我没有,在当前代码中没有必要。该类别是由em.find获得的,因此em已经知道它。如果将修改后的类别作为输入参数传递给该方法而不是其id,则可以使用merge。我注意到一件事。我已经有category=categoryFacade.find(Integer.parseInt(category_id));在我的servlet中,为什么我们需要Category=em.find(Category.class,id);在CategoryManager中。我认为这是多余的。我错了吗@ZielaI没有检查您的servlet代码,只是检查了管理器。只要servlet和管理器使用相同的实体managerok,就可以使用它。但我试过你的代码,但不起作用。即使用你的方式也不会更新。我认为问题在另一部分,请检查我哪里弄错了。我目前正在测试更新部分。
urlPatterns = {
"/admin/",
"/admin/viewOrders",
"/admin/viewCustomers",
"/admin/customerRecord",
//"/admin/customerOrder",
"/admin/orderRecord",
"/admin/logout",
"/admin/showProduct",
"/admin/showCategory",
"/admin/addCategory",
"/admin/addCategory.jsp",
"/admin/updateCategory",
"/admin/addProduct",
"/admin/addProduct.jsp",
"/admin/deleteProduct.jsp",
"/admin/deleteProduct"
})
public Category updateCategory(Category category, String name){
category.setName(name);
em.merge(category);
return category;
}