Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing parameter from controller to jsp in spring

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>

like image 410
01000001 Avatar asked Mar 31 '15 05:03

01000001


People also ask

How can I get getAttribute in JSP?

1) First create data at the server side and pass it to a JSP. Here a list of student objects in a servlet will be created and pass it to a JSP using setAttribute(). 2) Next, the JSP will retrieve the sent data using getAttribute(). 3) Finally, the JSP will display the data retrieved, in a tabular form.


1 Answers

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";
}
like image 105
Harshal Patil Avatar answered Oct 26 '22 04:10

Harshal Patil