Spring MVC控制器向JSP传值失败,添加$符号后浏览器报错
解决Spring MVC控制器数据传递到JSP的显示问题
我来帮你排查下这个问题,主要是几个细节没处理到位,我们一步步来修正:
1. 控制器未将Login对象传入模型
你在LoginUser方法里把model.addObject("login",login);注释掉了——这就导致JSP页面根本接收不到后端传递的Login实例,自然只能输出你写的占位符文本。
修正后的控制器代码:
@Controller public class LoginController { public final static String WELCOME = "Welcome"; public final static String LOGIN = "Login"; @RequestMapping(value ="/login" , method = RequestMethod.GET) public ModelAndView ShowLogin() { ModelAndView mav = new ModelAndView(LOGIN); return mav; } @RequestMapping(value = "/loginProcess", method = RequestMethod.POST) public ModelAndView LoginUser(@ModelAttribute("login") Login login) { ModelAndView model = new ModelAndView(WELCOME); System.out.println(login.getUserID()); System.out.println(login.getPassword()); model.addObject("login",login); // 取消注释,将Login对象传入模型 return model; } }
2. JSP的EL表达式写法错误且未开启EL支持
你之前写的{login.UserID}不是有效的EL表达式,正确格式是${...};另外旧版本JSP默认会忽略EL表达式,需要手动开启,同时要注意JavaBean属性名的匹配规则:
- EL里的属性名由getter方法推导:比如
getUserID()对应的属性是userID(去掉get后首字母小写),getPassword()对应password。 - 在page指令中添加
isELIgnored="false"确保EL生效。
修正后的Welcome.jsp代码:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" isELIgnored="false"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Welcome</title> </head> <body> <h1>${login.userID}</h1> <h1>${login.password}</h1> </body> </html>
3. 额外确认:Login类符合JavaBean规范
虽然控制台能打印值,但还是确认下Login类的结构是否规范,比如:
public class Login { private String userID; private String password; public String getUserID() { return userID; } public void setUserID(String userID) { this.userID = userID; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
做完这些修改后重启项目,提交登录请求,JSP就能正确显示用户的ID和密码了。
内容的提问来源于stack exchange,提问作者Vidhi Agarwal
相关产品推荐
相关产品推荐

