我有一个具有以下请求映射的控制器
@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}”,我就不会遇到此问题。
答案 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>
答案 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());
没有附加额外路径。这解决了这个问题。