如何使用 JSTL、JPA、EJB、JSP、Servlet 在 JavaEE 中更新和删除记录
How to Update and Delete record in JavaEE using JSTL, JPA, EJB, JSP, Servlet
我已经设法将数据保存到数据库中,但我无法更新和删除数据。我认为我走错了路或需要修复某些东西。我正在按照 Netbeans 的 JavaEE 电子商务教程自己学习 JavaEE。我已经学习了所有课程,现在向这个应用程序添加功能以使其成为真实世界的应用程序,因为这个示例课程缺少很多东西,但直到现在我才能使数据持久保存到数据库中。
在这里,我想知道我该如何修复它以及使它工作的更好方法是什么。
这是带有删除和更新按钮的阅读部分。它能够显示来自 MySQL 的数据列表。
<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>
updateCategory.jsp
<h1>Edit Category: </h1>
<form id ="addCatForm" action="<c:url value='/admin/updateCategory?id=${param.id} '/>" method="post">
<c:if test="${!empty validationErrorFlag}">
<c:if test="${!empty nameError}"><p>Fill Category Name</p></c:if>
</c:if>
<input type="hidden" name="id" value="${param.id}" />
<p><strong>Category Name:</strong>
<input class ="form-control" type="text" value ="${param.name}" name="name"></p>
<p><input class ="btn-success" type="submit" value="Submit"></p>
</form>
部分来自 AdminServlet 处理更新:
else if (userPath.equals("/admin/updateCategory")){
//Integer category_id = Integer.parseInt(request.getParameter("category_id")) ;
String category_id = request.getParameter("category_id");
category = categoryFacade.find(Integer.parseInt(category_id));
String name = request.getParameter("name");
boolean validationErrorFlag;
validationErrorFlag = validator.validateForm(name, request);
// if validation error found, return to same
if (validationErrorFlag == true) {
request.setAttribute("validationErrorFlag", validationErrorFlag);
}
else {
try{
request.setAttribute("name" , name);
//userPath = "/admin/showCategory";
//categoryManager.updateCategory(name, category_id);
categoryManager.updateCategory(name);
}
catch(Exception ex){
ex.toString();
}
} }
从 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;
}
我已经设法将数据保存到数据库中,但我无法更新和删除数据。我认为我走错了路或需要修复某些东西。我正在按照 Netbeans 的 JavaEE 电子商务教程自己学习 JavaEE。我已经学习了所有课程,现在向这个应用程序添加功能以使其成为真实世界的应用程序,因为这个示例课程缺少很多东西,但直到现在我才能使数据持久保存到数据库中。 在这里,我想知道我该如何修复它以及使它工作的更好方法是什么。
这是带有删除和更新按钮的阅读部分。它能够显示来自 MySQL 的数据列表。
<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>
updateCategory.jsp
<h1>Edit Category: </h1>
<form id ="addCatForm" action="<c:url value='/admin/updateCategory?id=${param.id} '/>" method="post">
<c:if test="${!empty validationErrorFlag}">
<c:if test="${!empty nameError}"><p>Fill Category Name</p></c:if>
</c:if>
<input type="hidden" name="id" value="${param.id}" />
<p><strong>Category Name:</strong>
<input class ="form-control" type="text" value ="${param.name}" name="name"></p>
<p><input class ="btn-success" type="submit" value="Submit"></p>
</form>
部分来自 AdminServlet 处理更新:
else if (userPath.equals("/admin/updateCategory")){
//Integer category_id = Integer.parseInt(request.getParameter("category_id")) ;
String category_id = request.getParameter("category_id");
category = categoryFacade.find(Integer.parseInt(category_id));
String name = request.getParameter("name");
boolean validationErrorFlag;
validationErrorFlag = validator.validateForm(name, request);
// if validation error found, return to same
if (validationErrorFlag == true) {
request.setAttribute("validationErrorFlag", validationErrorFlag);
}
else {
try{
request.setAttribute("name" , name);
//userPath = "/admin/showCategory";
//categoryManager.updateCategory(name, category_id);
categoryManager.updateCategory(name);
}
catch(Exception ex){
ex.toString();
}
} }
从 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;
}