EL表达式不能获取属性值的问题

今天遇到一个奇怪的问题,在controller中,使用转发后,页面可以使用el表达式获得属性值,代码如下:
@RequestMapping(value = "/adminLogin", method = RequestMethod.POST)
public String login(String username,String password,Model model){
String flag = adminService.login(username,password);
model.addAttribute("admininfo", flag);
return "index.jsp";
}
在前端页面中直接用${admininfo}就可以获得flag的值。

但当我使用重定向,将属性值写入到RedirectAttributes中,页面里的el表达式就失效了,通过${admininfo}获得的值为空,controller代码如下:

@RequestMapping(value = "/adminLogin", method = RequestMethod.POST)
public String login(String username,String password,Model model){
String flag = adminService.login(username,password);
model.addAttribute("admininfo", flag);
return "index.jsp";
}


在网上找了各种方法,大部分人都说要在jsp的头加这句:<%@ page isELIgnored="false" %>,打开jsp的el表达式功能,我这句也加过了,但还是不起作用。 后来在csdn看到一位前辈的回答:

EL表达式(与范围有关的内置对象)
pageScope、requestScope、sessionScope、applicationScope
如果没有给定参数名的取值范围,系统默认从page范围中查找,找不到则找request,一次类推,都找不到时传回null
EL表达式(与输入有关的内置对象)
param 和 paramValues 用来获取表单中提交的信息。前者返回 String 类型数据,后者返回 String[] 类型的数据。如 ${paramValues.name}。

${param.name} 等价于 request.getParamter("name")
${requestScope.name} 等价于 request.getAttribute("name")

${name}取不到值、
LZ这样试试!${param.name}

在不行就:request.getParamter("name") / request.getAttribute("name") 这样取值出来对比一下!
就知道怎么获取了!


之后我写成这样${param.admininfo} ,就可以获取到正确的值了。
我的理解是转发和重定向的到的最终页面路径不同,导致el表达式寻值的时候,相对的路径也发生了变化,所以会有这样奇怪的区别,具体的原理我也不太清楚,我也是初学者,希望有知道的大神回复,谢谢!!

你可能感兴趣的:(jsp页面)