在Spring中将参数从控制器传递到jsp

在Spring中将参数从控制器传递到jsp

本文介绍了在Spring中将参数从控制器传递到jsp的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我有一个如下的控制器方法.

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";
}

我在其中传递jobId以通过id获取作业实例,并返回"edit"字符串,以便根据InternalResourceViewResolver映射到edit.jsp.但是,当我单击链接时,它会转到/edit/44,在这种情况下,44将是该编辑链接所属的工作的ID.最终,我收到错误消息,指出找不到资源.

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

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方法中,您仅将具有模型属性的作业ID返回到edit.jsp.但是实际上,在edit.jsp页面上,您需要作业对象,因此需要通过id获取作业对象,将其添加为模型属性.

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";
}

这篇关于在Spring中将参数从控制器传递到jsp的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-07 01:50