添加Path变量会更改视图路径

时间:2017-09-28 06:14:37

标签: jsp spring-mvc url-redirection

我有一个具有以下请求映射的控制器

@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public ModelAndView loadUserPage(@PathVariable("id") String id) {

    ModelAndView modelAndView = new ModelAndView("editUser.jsp","editUser", new User());
    modelAndView.addObject("activeUser",getActiveUserByID(id));
    return modelAndView;
}

在我的home.jsp中,我有一个href链接,如下所示

<a href="${pageContext.request.contextPath}/user/${eachUser.userId}">Click Here</a>

但是当我点击上面的链接时,URL会指向localhost:8080 / user / 1234(假设用户ID是1234)但是它会抛出404错误,说明找不到/user/editUser.jsp。我想知道为什么将“/ user”附加到jsp路径上?

如果我使用@RequestParam并将href网址更改为“/user?id=${eachUser.userId}”,我就不会遇到此问题。

3 个答案:

答案 0 :(得分:1)

@RequestParam@PathVariable两种方式都与我合作。这是测试代码和输出。使用时出现错误&#34; .jsp&#34;在退货声明中。

package com.mpro.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.mpro.web.model.User;

@Controller
public class TestController {

    @RequestMapping(value = "/user", method = RequestMethod.GET)
    public ModelAndView loadUserPage(@RequestParam("id") String id) {

        ModelAndView modelAndView = new ModelAndView("testpage","editUser", new User());
        modelAndView.addObject("activeUser",5);
        return modelAndView;
    }

    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public ModelAndView loadUserPage1(@PathVariable("id") String id) {

        ModelAndView modelAndView = new ModelAndView("testpage","editUser", new User());
        modelAndView.addObject("activeUser",5);
        return modelAndView;
    }

}

在jsp中

<a href="${pageContext.request.contextPath}/user?id=5">Click Here for request parameter</a>
    <a href="${pageContext.request.contextPath}/user/5">Click Here for path variable</a>

并输出 enter image description here

答案 1 :(得分:0)

您错过了添加路径变量参数名称,在本例中为 id

@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public ModelAndView loadUserPage(@PathVariable("id") String id) {
...
}

我认为当您需要匹配uri中的模式或从uri获取信息时,会使用 @PathVariable 。这就是它返回匹配的uri的原因。主要用于REST。

@RequestParam 主要用于从网址获取特定参数。如果您需要id值,则可以使用 @RequestParam

这是我在使用它们之后所理解的。 试试这个并告诉我它是否有意义。

答案 2 :(得分:0)

当我改变了

$('.btn_edit').click(function(e){
    var uid = $(this).attr('data-bind');  // Using attr, not val()...
    $.post("try.php",{ btn_edit : uid},
        function(){
        });
    console.log(uid);//I could see the id logged on console
    $('#edit_details').modal('show');
    e.preventDefault();//prevent the form from submitting
});

new ModelAndView("editUser.jsp","editUser", new User()); 

没有附加额外路径。这解决了这个问题。