我有一个控制器方法如下。
@RequestMapping("/edit/{jobId}") public String editJob(@PathVariable("jobId") Integer jobId,Model model){ model.addAttribute("id",jobId); return "edit"; }
在其中我传递jobId以通过id获取作业的实例,并返回“ edit”字符串,以便按照InternalResourceViewResolver映射到edit.jsp。但是,当我单击链接时,它会转到/ edit / 44,在这种情况下,44将是该编辑链接所属的工作的ID。最后,我得到了错误,指出没有找到资源。
home.jsp
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ page session="false"%> <html> <head> <link rel="stylesheet" type="text/css" href="<c:url value="/resources/css/style.css"/>" /> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" /> <title>Home</title> </head> <body id="main"> <div class="container"> <h2 style="color:white">All posted jobs</h2> <c:if test="${empty jobList}"> <h6>No Job Post Yet</h6> </c:if> <c:if test="${!empty jobList}"> <c:forEach items="${jobList}" var="job"> <div class="panel panel-info"> <div class="panel-heading"> <h3 class="panel-title">${job.title }</h3> </div> <div class="panel-body">${job.description }</div> <div class="panel-footer"> <a id="link" href="delete/${job.id }">Delete</a> <a id="link" href="edit/${job.id}">Edit</a> </div> </div> </c:forEach> </c:if> <section> <form:form method="post" action="add" modelAttribute="job" class="form-horizontal"> <div class="form-group" id="addForm"> <form:label class="control-label" path="title">Title:</form:label> <form:input class="form-control" path="title"/> <form:label class="control-label" path="description">Description</form:label> <form:textarea class="form-control" rows="5" path="description" /> <button class="btn btn-success"> <span class="glyphicon glyphicon-plus-sign"></span> Add a Job </button> </div> <a id="addJob" href="add">+</a> </form:form> </section> </div>
JobController.java
package com.job.src; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.job.src.model.Job; import com.job.src.services.JobService; @Controller public class JobController { @Autowired private JobService jobService; @RequestMapping(value= "/") public String listJobs(Map<String,Object> map){ map.put("job", new Job()); map.put("jobList", jobService.listJobs()); return "home"; } @RequestMapping(value= "/add", method=RequestMethod.POST) public String addJob(Job job){ jobService.addJob(job); return "redirect:/"; } @RequestMapping("/delete/{jobId}") public String deleteJob(@PathVariable("jobId") Integer jobId){ jobService.removeJob(jobId); return "redirect:/"; } @RequestMapping("/edit/{jobId}") public String editJob(@PathVariable("jobId") Integer jobId,Model model){ model.addAttribute("id",jobId); return "edit"; } }
edit.jsp
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <link rel="stylesheet" type="text/css" href="<c:url value="/resources/css/style.css"/>" /> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" /> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <form:form method="post" action="editSuccess" modelAttribute="job" class="form-horizontal"> <div class="form-group" id="addForm"> <form:label class="control-label" path="title">Title: </form:label> <form:input class="form-control" path="title" /> <form:label class="control-label" path="description">Description</form:label> <form:textarea class="form-control" rows="5" path="description" /> <button class="btn btn-success"> <span class="glyphicon glyphicon-plus-sign"></span> Add a Job </button> </div> </form:form>
在editJob方法中,您仅将具有model属性的job ID返回edit.jsp。但是实际上在edit.jsp页面上,您需要作业对象,因此您需要通过id获取作业对象,将其添加为模型属性。
editJob
@RequestMapping("/edit/{jobId}") public String editJob(@PathVariable("jobId") Integer jobId,Model model){ //model.addAttribute("id",jobId); this is wrong Job job = jobService.getJobById(jobId); //write method in jobservice to get job by id i.e. getJobById(Integer jobId); model.addAttribute("job",job) return "edit"; }