过程重现
在SpringMVC搭配Hibernate项目中,在后端取到product对象后,使用request.setattribute()
方法将product对象传到下一个页面,并使用EL表达式${param.code}
接收。但是页面显示为空,重点是没有报错。
我通过request.getAttribute()
取值,并打印,发现信息已成功传到当前页面。
错误代码
controller层
@RequestMapping(value = "/editproduct/{pid}", method = {RequestMethod.GET})
public String editProduct(@PathVariable("pid") String pid, HttpServletRequest request) {
ProductDto dto = productService.findProductById(pid);
request.setAttribute("param", dto);
return "edit_duc";
}
jsp页面
<li><label>产品编号</label><span
class="pdtb9 fl" id="productcode">${param.productcode}</span></li>
错误原因
param是jsp自带参数,特别是用EL表达式的时候,${param.*}
,相对于 request.getParameter("id")
所以在后端request.setAttribute()
的时候应该换一个常量名。
正确代码
controller层
@RequestMapping(value = "/editproduct/{pid}", method = {RequestMethod.GET})
public String editProduct(@PathVariable("pid") String pid, HttpServletRequest request) {
ProductDto dto = productService.findProductById(pid);
request.setAttribute("product", dto);
return "edit_duc";
}
jsp页面
<li><label>产品编号</label><span
class="pdtb9 fl" id="productcode">${product.productcode}</span></li>
感想
关于底层知识一定要找机会好好补一下,否则以后可能闹笑话。