Passing parameter from controller to jsp in spring

38,175

In editJob method your are returning only id of job with model attribute to edit.jsp. But actually on edit.jsp page you need job object so you need to get job object by id add it as model attribute.

@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";
}
Share:
38,175
01000001
Author by

01000001

Updated on July 09, 2022

Comments

  • 01000001
    01000001 almost 2 years

    I have a controller method as follow.

    @RequestMapping("/edit/{jobId}")
    public String editJob(@PathVariable("jobId") Integer jobId,Model model){
        model.addAttribute("id",jobId);
        return "edit";
    }
    

    in which i am passing the jobId to get the instance of the job by id and returning "edit" string so that it maps to edit.jsp as per the InternalResourceViewResolver. But when i click on the link it goes to /edit/44 in which case 44 would be the id of the job for which the edit link belongs to. Finally i got the error stating no resource found.

    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>
    

  • 01000001
    01000001 about 9 years
    Thanx harshal let me try this. Actually i have been thinking about this since a while.
  • Mehandi Hassan
    Mehandi Hassan over 6 years
    @ArpitParasana how to show model value in jsp page??
  • Harshal Patil
    Harshal Patil over 6 years
    @MehandiHassan are you using JSP with JSTL or JSP only?
  • Mehandi Hassan
    Mehandi Hassan over 6 years
    @HarshalPatil yes I am using JSP with JSTL
  • Harshal Patil
    Harshal Patil over 6 years
    @MehandiHassan check out this stackoverflow.com/questions/34157233/…
  • Mehandi Hassan
    Mehandi Hassan over 6 years
    @HarshalPatil thnx buddy