我有一个弹簧控制器,其中有CURD方法。
@Controller
public class EditEmployeeController {
@Autowired
private EmployeeManager employeeManager;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String listEmployees(ModelMap map)
{
map.addAttribute("employee", new TestEmployee());
map.addAttribute("employeeList", employeeManager.getAllEmployees());
System.out.println("calling listEmployees");
return "editEmployeeList";
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addEmployee(@ModelAttribute(value="employee") TestEmployee employee, BindingResult result)
{
employeeManager.addEmployee(employee);
return "redirect:/";
}
@RequestMapping("/delete/{employeeId}")
public String deleteEmplyee(@PathVariable("employeeId") Integer employeeId)
{
employeeManager.deleteEmployee(employeeId);
return "redirect:/";
}
@RequestMapping("/update/{employeeId}")
public String updateEmployee(@PathVariable("employeeId") Integer employeeId, ModelMap map)
{
TestEmployee emp = employeeManager.updateEmployee(employeeId);
map.addAttribute("employee", emp);
return "redirect:/";
}
jsp页面就像这样
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>Spring Hibernate Integration</title>
</head>
<body>
<h2>Employee Management Screen</h2>
<form:form method="post" action="add" commandName="employee">
<table>
<tr>
<td><form:label path="firstname"><spring:message code="label.firstname"/></form:label></td>
<td><form:input path="firstname" /></td>
</tr>
<tr>
<td><form:label path="lastname"><spring:message code="label.lastname"/></form:label></td>
<td><form:input path="lastname" /></td>
</tr>
<tr>
<td><form:label path="email"><spring:message code="label.email"/></form:label></td>
<td><form:input path="email" /></td>
</tr>
<tr>
<td><form:label path="telephone"><spring:message code="label.telephone"/></form:label></td>
<td><form:input path="telephone" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="<spring:message code="label.add"/>"/>
</td>
</tr>
</table>
</form:form>
<h3>Employees</h3>
<c:if test="${!empty employeeList}">
<table class="data">
<tr>
<th>FirstName</th>
<th>LastName</th>
<th>Email</th>
<th>Telephone</th>
<th>Action</th>
</tr>
<c:forEach items="${employeeList}" var="emp">
<tr>
<td>${emp.firstname}</td>
<td>${emp.lastname}</td>
<td>${emp.email}</td>
<td>${emp.telephone}</td>
<td><a href="delete/${emp.id}">Delete</a>|
<a href="update/${emp.id}">Update</a>
</td>
</tr>
</c:forEach>
</table>
</c:if>
</body>
</html>
这是我的web.xml文件
<servlet>
<servlet-name>employee</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>employee</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
除了Update方法之外,所有功能都正常工作,因为当我尝试从DB获取对象时,它正在被提取但在渲染之前正在调用listEmployees方法,它再次为渲染分配空白对象。
我的问题是为什么当我返回重定向时再次调用这个listEmployee方法:/来自带有Map中对象的update方法。 请帮忙。
答案 0 :(得分:0)
更新方法完成后,您将向客户端发送HTTP重定向响应。 因此,您向他发送一个重定向到/的请求,而不是给他一个网页。 这是你的索引页面。
现在客户端浏览器发送/的请求,然后您回复一个员工列表。
有道理吗?
这是指POST-redirect-GET模式,described here
答案 1 :(得分:0)
因为重定向路径映射到listEmployee方法而调用listEmployee方法的原因。
所以改为将重定向提供给另一个视图。