javaweb在类别列表功能基础上完成新增类别。 要求: (1)禁止直接访问jsp页面。 (2)参照类别列表功能完成新增。使用注释跳转 (3)新增成功或失败后,刷新列表页;如果新增成功,则新增的数据显示在页面上
时间: 2024-12-18 20:34:41 浏览: 8
在JavaWeb中实现基于类别列表的新增类别功能,可以按照以下步骤操作:
1. **创建模型类(Category)**:
```java
// Category.java
public class Category {
private int id;
private String name; // 类别名称
// getters and setters
}
```
2. **设置Controller**:
```java
// CategoryController.java
@GetMapping("/categories") // 获取所有类别列表
public String listCategories(Model model) { // 使用Model传入数据到视图
List<Category> categories = getCategoryService().getAllCategories();
model.addAttribute("categories", categories);
return "category-list"; // 返回类别列表的JSP页面,但不直接访问
}
@PostMapping("/add-category") // 新增类别
@ResponseBody // 防止直接访问,返回JSON数据
public Result addCategory(Category category) {
boolean success = getCategoryService().saveCategory(category);
if (success) {
// 如果新增成功,跳转并刷新列表页
return new Result(ResultCode.SUCCESS, "Category added successfully", "category-list");
} else {
return new Result(ResultCode.ERROR, "Failed to add category", null);
}
}
```
3. **服务层(Service)**:
```java
// CategoryService.java
public Category saveCategory(Category category) {
// 实现保存逻辑,如数据库操作
if (isValidCategory(category)) {
// 存储后返回新创建的Category实例
return new CategoryRepository().save(category);
} else {
throw new ValidationException("Invalid category data");
}
}
```
4. **视图层(JSP)**:
- `category-list.jsp` 中添加表格显示所有类别,并提供一个表单用于提交新的类别:
```html
<!-- category-list.jsp -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<form action="${pageContext.request.contextPath}/add-category" method="post">
Name:<input type="text" name="name"><br>
<!-- ...其他输入字段... -->
<button type="submit">Add Category</button>
</form>
<%-- 这里用JavaScript监听表单提交,发送Ajax请求,避免直接刷新整个页面 --%>
<script>
document.querySelector('form').addEventListener('submit', function(event){
event.preventDefault(); // 阻止默认提交
var xhr = new XMLHttpRequest();
xhr.open('POST', '/add-category', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
location.reload(); // 刷新页面获取结果
}
};
xhr.send(JSON.stringify(categoryFromForm));
});
</script>
```
5. **响应处理**:
- `Result`类用于封装状态、消息和是否刷新页面的信息。
注意,上述代码未涉及具体的错误处理和前端验证,实际开发中需要完善这些部分。另外,在实际项目中,Ajax异步请求通常会使用Spring MVC的`@ModelAttribute`或`@RequestBody`以及对应的`@Validated`约束。
阅读全文