本节书摘来自异步社区《精通Spring MVC 4》一书中的第2章,第2.6节,作者:【美】Geoffroy Warin著,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.6 Spring表达式语言
当使用“${}”语法时,我们实际上使用的是Spring表达式语言(Spring Expression Language,SpEL)。关于EL,有多个不同的变种,而SpEL是其中威力强大的一种。
表2-2是它主要特性的概览。
SpEL的用处并不仅限于视图之中,可以将它用在Spring框架的各种地方,例如,在通过@Value注解往bean中注入属性时,也可以使用SpEL。
从请求参数中获取数据
我们已经能够在视图中展现来自服务端的数据,但是,如果想获取用户的输入该怎么办呢?根据HTTP协议,有很多方式可以实现这一点,其中最简单的就是传递查询参数到URL之中。
你肯定早就知道什么是查询参数了吧,它们会位于URL的“?”字符后面,是由名称和值所组成的列表,每一项会使用“&”符号进行分割,例如:page?var1= value1&var2=value2。
可以使用这项技术要求用户提供他们的名字,再次修改HelloController类,如下所示:
@Controller
public class HelloController {
@RequestMapping("/")
public String hello(@RequestParam("name") String userName, Model
model) {
model.addAttribute("message", "Hello, " + userName);
return "resultPage";
}
}
如果此时导航至localhost:8080/?name=Geoffroy,将会看到如图2-5所示的结果。
图2-5
默认情况下,请求参数是强制要求存在的。这意味着,如果导航至localhost:8080,那么将会看到一个错误页面。
查阅一下@RequestParam的代码,可以看到除了value属性以外,它还有其他两个可用的属性:required和defaultValue。
因此,可以修改一下代码,为其指定一个默认值或者将其设置为非必填项:
@Controller
public class HelloController {
@RequestMapping("/")
public String hello(@RequestParam(defaultValue = "world") String
name, Model model) {
model.addAttribute("message", "Hello, " + name);
return "resultPage";
}
}
在Java 8中,我们可以不指定value参数。如果这样的话,将会使用带有注解的方法参数名称。