我已设法将数据保存到数据库中,但我无法更新数据并删除。我想我错了方法或需要修复的东西。我正在通过Netbeans的JavaEE电子商务教程学习JavaEE。我已经完成了所有课程,现在为这个应用程序添加功能,使其成为真实世界的应用程序,因为这个示例课程缺少很多东西,但直到现在我只能使数据持久化到数据库。 在这里,我想知道如何解决它,以及更好的方法来实现它。
这是Read部分,包含要删除和更新的按钮。它能够显示来自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;
}
答案 0 :(得分:1)
没有用于调用删除的代码,因此请确保实际调用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()
)
答案 1 :(得分:0)
实际上代码是正确的但是我之前猜到的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;
}