php控制器向视图传数据,SpringMVC 控制器向视图传值的方式

在SpringMVC中,控制器向视图传值一般有三中方式,分别是通过ModelAndView、ModelMap、Session,下面将讲述三种传值方式

ModelAndView

将控制器方法的返回值设为ModelAndView,并且向ModelAndView中添加数据,在视图的requestScope中将可以访问到放入的数据。

控制器方法示例如下:

@RequestMapping("/getTime")

public ModelAndView getTime(){

String viewName = "success";

//向ModelAndView中构造方法传入的参数为目标视图的名称

ModelAndView modelAndView = new ModelAndView(viewName);

modelAndView.addObject("time", new Date());

return modelAndView;

}

在目标视图中可以访问到该变量

${requestScope.time}

ModelMap

使用ModelMap需要有一个ModelMap变量作为控制器方法的形参,在其中添加要传递到页面的数据。此处用ModelMap和Map都是可以的。

示例代码如下:

@RequestMapping("/getCity")

public String getCity(Map map){

map.put("address","NingBo");

return "success";

}

同样这么写也是可以的

@RequestMapping("/getCity")

public String getCity(ModelMap map){

map.put("address","NingBo");

return "success";

}

其实,无论是ModelMap还是Map,甚至是不传递参数,仅仅是返回目标视图名称,SpringMVC都会把它转换陈ModelAndView传递给视图。

在ModelAndView的源码中可以看到,ModelAndView有两个成员变量,分别是view和Model

private Object view;

private ModelMap model;

分别代表了目标视图和携带的参数,其中的参数会由SpringMVC把ModelMap 中的键值对逐个放到Request中,也就是为什么放入到ModelAndView或ModelMap中的数据最终能在requestScope中访问到的原因。

Session

如果把需要的数据放入到Session中,那么视图自然能访问到该数据。SpringMVC将值放入Session中的方法是添加SessionAttributes注解。

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Inherited

@Documented

public @interface SessionAttributes {

String[] value() default {};

Class>[] types() default {};

}

以上为SessionAttributes的源码,可以看到该注解目标是类,所以要把该注解放到控制器前

有两个属性,其中value表示要放入session中的键。types表示要自动放入session中的类类型。

注意,放入SessionAttributes还有一个条件是该值要手动放入request,也就是ModelAndView中

@SessionAttributes(types = {java.lang.String.class},value = {"city","time"})

这句注释的意思是自动把放入ModelAndView中的值为String类型的键值对放入Session中,同时把键为city和time的键值对也放入Session中。

然后,在该会话的所有页面都可以访问到这些属性了。

${sessionScope.names}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值