正在回答 回答被采纳积分+1
同学你好!
这里的入参map,不是在{}中定义的。你可以理解为是springmvc在调用这个方法时,传递了这个参数
不能写list,之前老师说过map相当于时ModelAndView中的model。如果你写成list,return “claim_voucher_detail”,是无法在页面获取到数据的。
如果你在to_add的时候,没有传递参数,由于页面使用的是springmvc的from,在跳转页面时就会报错
to_add的时候传递的item是下拉框的数据
而在返回时选中的下来框数据会成为info中报销单明细的一部分。这里返回item这个下来框数据没有意义。
建议同学不明白时,剋看一下具体的数据和业务结合理解一下
modelAttribute="info"主要是绑定前端传过来的数据。在页面进行读取,传递给后台的时候后台换一个名字接受也是可以的。
只要接受的参数中的属性和前端页面的name相同即可
祝学习愉快~
你看我这样里面对吗 假如add.jsp页面定义了modelAttribute="employee"
那么我在跳转到添加页面的时候要声明这个model,哪怕是空的,将他传回去与之匹配
@RequestMapping("/to_add")
public String toAdd(Map<String,Object> map){
map.put("items", Contant.getItems());
map.put("info",new ClaimVoucherInfo());
return "claim_voucher_add";
}
如果没有定义上面的,直接这样:
@RequestMapping("/to_add")
public String toAdd(){
return "claim_voucher_add";
}
那么
@RequestMapping("/add")
public String add(HttpSession session,ClaimVoucherInfo info){
Employee employee = (Employee)session.getAttribute("employee");
info.getClaimVoucher().setCreateSn(employee.getSn());
claimVoucherBiz.save(info.getClaimVoucher(),info.getItems());
return "redirect:detail?id="+info.getClaimVoucher().getId();
}
就接受不了info或者item数据是吧
为什么这里能接受info,而没有接受item,add页面定义的modelAttribute="info,所有接受不了
modelAttribute="info"只是将数据封装返回回去吗
而不管传来的数据,因为我看见\toadd,好像传了个items到add.jsp?
同学你好,关于同学的问题:
1、声明了modelAttribute,就只能用map集合和普通类型department之类的,我声明了多个department类:d1、d2,前台都能接受到,只要前台的modelAttribute是department类型
答:不是很明白同学表达的意思。这里是传递一个model给页面,在页面中使用modelAttribute解析这个model。map中存入的key值和modelAttribute的值是一致的。map除了传递model之外,还可以传递其他数据。
2、我声明了一个其他的类,叫A,但是A里面有department类变量(private Department d;)还有其他的变量,但是前台只能接受A里面的d
答:如果向前台传递了A,前台可以接收A,并且通过A可以获取d。
3、map里面放了其他类,往前台传的是map还是里面的类或是变量,还是说传过去的map,但是前台只能接受与之匹配的department
答:这里的map用来传递数据。会将map传递过去,map中的数据也会传递过去,不只是department。
4、toAdd里面为什么要map.put("department",new Department());不就是跳转到添加页面吗,直接跳转不行吗
答:这里是传递一个model,modelAttribute接收并解析该model,form表单会通过path将其对应的属性和input绑定,这样添加数据后,会封装成model,也就是department传递给后台。后台接收数据时是department对象,而不是通过getParameter()获取单个数据。
5、返回前台的数据有什么前提,是要写到()这个方法旁边的括号里面?
答:不理解同学的问题,建议同学可以结合代码具体描述一下。
6、表单的detail页面没有声明modelAttribute,是不是什么都可以返回回去,那么我定义方法体里面的变量都返回去了,还是说有什么规范,要写到()里面,还是什么?
答:这个detail是指claim_vourcher_detail.jsp页面吗?该页面是用来显示报销单信息的,不需要返回数据。
祝:学习愉快~
同学你好,这里是传递一个model给前台页面,这个model就是Department对象,在前台页面中,SpringMVC的form表单中,modelAttribute可以接收并解析该对象。如:
将Department对象的属性通过path和input标签绑定,
在页面添加数据后,可以将添加的数据封装为Department对象返回给后台。这是SpringMVC的form表单完成。
toAdd()方法中map存入一个Department就是传递一个model给页面,使用modelAttribute可以接收并解析该model,并和input对应。这里应该传递一个model,应该是某个实体类的对象,方便modelAttribute解析。所以传递int和list集合是不可以的。
祝:学习愉快~
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星