DepartmentController

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

7回答
好帮手慕柯南 2020-04-06 11:02:59

同学你好!

  1.   这里的入参map,不是在{}中定义的。你可以理解为是springmvc在调用这个方法时,传递了这个参数

  2. 不能写list,之前老师说过map相当于时ModelAndView中的model。如果你写成list,return “claim_voucher_detail”,是无法在页面获取到数据的。

  3. 如果你在to_add的时候,没有传递参数,由于页面使用的是springmvc的from,在跳转页面时就会报错

    http://img1.sycdn.imooc.com/climg/5e8a99f70929a08212040180.jpg

  4. to_add的时候传递的item是下拉框的数据

    http://img1.sycdn.imooc.com/climg/5e8a9b7c09f1d9da04290225.jpg

    而在返回时选中的下来框数据会成为info中报销单明细的一部分。这里返回item这个下来框数据没有意义。

    建议同学不明白时,剋看一下具体的数据和业务结合理解一下

  5. modelAttribute="info"主要是绑定前端传过来的数据。在页面进行读取,传递给后台的时候后台换一个名字接受也是可以的。

    http://img1.sycdn.imooc.com//climg/5e8a9d600936738405150151.jpg

    只要接受的参数中的属性和前端页面的name相同即可

    http://img1.sycdn.imooc.com//climg/5e8a9da10950190806340474.jpg

祝学习愉快~

提问者 明月_0 2020-04-05 11:36:30

http://img1.sycdn.imooc.com//climg/5e894f380991a4db10880446.jpg

你看我这样里面对吗  假如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?

好帮手慕阿满 2020-04-02 19:04:20

同学你好,关于同学的问题:

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页面吗?该页面是用来显示报销单信息的,不需要返回数据。

祝:学习愉快~


好帮手慕阿满 2020-04-02 11:43:32

同学你好,这里可以使用map.put()存储list集合,传递到前端页面中展示,如:

http://img1.sycdn.imooc.com//climg/5e855d290902eee806000187.jpg

http://img1.sycdn.imooc.com//climg/5e855d9509af641b08060493.jpg

至于toAdd()方法中存储一个Department对象,这里是传递一个model,使form表单的modelAttribute可以接收并解析该对象。传递model时,不能是list集合和int类型值。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~


  • 提问者 明月_0 #1
    1、声明了modelAttribute,就只能用map集合和普通类型department之类的,我声明了多个department类:d1、d2,前台都能接受到,只要前台的modelAttribute是department类型 2、我声明了一个其他的类,叫A,但是A里面有department类变量(private Department d;)还有其他的变量,但是前台只能接受A里面的d 3、map里面放了其他类,往前台传的是map还是里面的类或是变量,还是说传过去的map,但是前台只能接受与之匹配的department 4、toAdd里面为什么要map.put("department",new Department());不就是跳转到添加页面吗,直接跳转不行吗 5、返回前台的数据有什么前提,是要写到()这个方法旁边的括号里面? 6、表单的detail页面没有声明modelAttribute,是不是什么都可以返回回去,那么我定义方法体里面的变量都返回去了,还是说有什么规范,要写到()里面,还是什么?
    2020-04-02 12:35:31
  • 提问者 明月_0 #2
    问题有点多,见谅
    2020-04-02 12:35:52
好帮手慕阿满 2020-04-01 18:56:25

同学你好,可以使用list集合向前端传递数据,如:

http://img1.sycdn.imooc.com//climg/5e84730509ef79bd05970179.jpg

但是如果是前端页面中,使用modelAttribute接收并解析,必须是model。

祝:学习愉快~

  • 提问者 明月_0 #1
    什么意思?
    2020-04-01 19:19:29
好帮手慕阿满 2020-04-01 15:21:08

同学你好,这里是传递一个model给前台页面,这个model就是Department对象,在前台页面中,SpringMVC的form表单中,modelAttribute可以接收并解析该对象。如:

http://img1.sycdn.imooc.com//climg/5e843f7f0934c63c09100154.jpg

将Department对象的属性通过path和input标签绑定,

http://img1.sycdn.imooc.com//climg/5e843ffa09aa579406950458.jpg

在页面添加数据后,可以将添加的数据封装为Department对象返回给后台。这是SpringMVC的form表单完成。

toAdd()方法中map存入一个Department就是传递一个model给页面,使用modelAttribute可以接收并解析该model,并和input对应。这里应该传递一个model,应该是某个实体类的对象,方便modelAttribute解析。所以传递int和list集合是不可以的。

祝:学习愉快~

  • 提问者 明月_0 #1
    如果list里面放的department对象了
    2020-04-01 16:12:32
好帮手慕阿满 2020-03-31 19:02:00

同学你好,关于同学的问题:

1、这里是将数据存入map中,然后传递到页面,不需要setAttribute。

2、这里的()并不是从前台获取数据,这里的map是在方法中使用的,使用该map向前台传递数据。

3、这里是传递一个model到前台页面,在页面中,springMVC的form表单中,modelAttribute可以解析该model,添加数据后,将其封装成model,传递到后台,如:

http://img1.sycdn.imooc.com//climg/5e83211a09ffc63709060148.jpg

http://img1.sycdn.imooc.com//climg/5e83212d09c46c8005420144.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 明月_0 #1
    modelAttribute是将前台的数据封装成departm传递到后台, toadd为什么要加map,放一个空的department类了? 为什么map会被返回到前台了,我随便定义一个int a =3;是不是也不会被返回了? List list=new ArryList();是不是也会被返回了?
    2020-03-31 22:45:22
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师