2024年9月modelattribute(Spring中关于@ModelAttribute用于注解请求方法参数的问题)

 更新时间:2024-09-21 08:31:09

  ⑴modelattribute(Spring中关于ModelAttribute用于注解请求方法参数的问题

  ⑵Spring中关于ModelAttribute用于注解请求方法参数的问题

  ⑶ModelAttribute可以用于注解方法和参数。ModelAttribute可以用于注解方法和参数。、注解Controller中的方法时,返回的参数是一个属性值,ModelAttribute注解的方法在Controller中每个URL处理方法调用之前,都会按照先后顺序执行。、注解Controller方法的参数,用于从model、Form表单或者URL请求参数中获取属性值。例子如下,已在Spring.中验证通过。ControllerpublilassTestAction{/*---------------------ModelAttribute注解一个方法---------------------*//*方法返回值为:void,没有什么意义*/ModelAttributepublicvoidpopulateModel(ModelMapmodel){System.out.println(“---populateModel---“);model.addAttribute(“attributeName“,““);}/*不指定指定属性名称,方法返回一个对象,相当于model.addAttribute(“user“,user)*/ModelAttributepublicUseraddUser(){System.out.println(“---addUser---“);Useruser=newUser();user.setId();user.setUsername(“alan“);user.setPassword(““);returnuser;}/*指定属性名称,方法返回一个字符串,相当于model.addAttribute(“string-key“,“string-value“)*/ModelAttribute(“string-key“)publicStringaddString(){System.out.println(“---addString---“);return“string-value“;}/*返回一个model属性,而不是视图名称*/RequestMapping(value=“helloWorld“)ModelAttribute(“attributeName“)publicStringhelloWorld(){System.out.println(“---helloWorld---“);return“hi“;}/*---------------------ModelAttribute注解方法的参数---------------------*//*从模型中获取一个属性值,将其转换到对应类型的变量中*/RequestMapping(value=“helloWorld“)publicStringhelloWorld(ModelAttribute(“user“)Useruser,ModelAttribute(“attributeName“)StringaName,ModelAttribute(“string-value“)Stringsvalue){System.out.println(“---helloWorld---“+user.getUsername()+“,“+user.getPassword());System.out.println(“aName=“+aName+“,svalue=“+svalue);return“helloWorld“;}/*从Form表单或者URL参数中获取属性参数值,放到对应类型的参数中,注意:此时表单中的组件名和参数属性名称一致,如User对象有两个属性,分别为username,password,则表单中input的名称必须为username,password,才能实现属性值注入。*注意这个User类必须要有无参数的构造函数或者是setter方法*此时ModelAttribute可以不用显式写*/RequestMapping(value=“helloWorld“)publicStringhelloWorld(ModelAttribute(“user“)Useruser){System.out.println(“---helloWorld---“+user.getUsername()+“,“+user.getPassword());return“helloWorld“;}}

  ⑷pathvariable和requestparam的区别,sessionattributes,modelattribute的用法

  ⑸请求路径上有个id的变量值,可以通过PathVariable来获取RequestMapping(value=“/page/{id}“,method=RequestMethod.GET)RequestParam用来获得静态的URL请求入参spring注解时action里用到。简介:handlermethod参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型A、处理requeturi部分(这里指uritemplate中variable,不含queryString部分的注解:PathVariable;B、处理requestheader部分的注解:RequestHeader,CookieValue;C、处理requestbody部分的注解:RequestParam,RequestBody;D、处理attribute类型是注解:SessionAttributes,ModelAttribute;、PathVariable当使用RequestMappingURItemplate样式映射时,即someUrl/{paramId},这时的paramId可通过Pathvariable注解绑定它传过来的值到方法的参数上。示例代码:viewplaincopyprint?ControllerRequestMapping(“/owners/{ownerId}“)publilassRelativePathUriTemplateController{RequestMapping(“/pets/{petId}“)publicvoidfindPet(PathVariableStringownerId,PathVariableStringpetId,Modelmodel){//implementationomitted}}上面代码把URItemplate中变量ownerId的值和petId的值,绑定到方法的参数上。若方法参数名称和需要绑定的uritemplate中变量名称不一致,需要在PathVariable(“name“)指定uritemplate中的名称。、RequestHeader、CookieValueRequestHeader注解,可以把Request请求header部分的值绑定到方法的参数上。示例代码:这是一个Request的header部分:Hostlocalhost:Aepttext/html,application/xhtml+xml,application/xml;q=.Aept-Languagefr,en-gb;q=.,en;q=.Aept-Encodinggzip,deflateAept-CharsetISO--,utf-;q=.,*;q=.Keep-AliveRequestMapping(“/displayHeaderInfo.do“)publicvoiddisplayHeaderInfo(RequestHeader(“Aept-Encoding“)Stringencoding,RequestHeader(“Keep-Alive“)longkeepAlive){}上面的代码,把requestheader部分的Aept-Encoding的值,绑定到参数encoding上了,Keep-Aliveheader的值绑定到参数keepAlive上。CookieValue可以把Requestheader中关于cookie的值绑定到方法的参数上。例如有如下Cookie值:JSESSIONID=AADACEBACDD参数绑定的代码:RequestMapping(“/displayHeaderInfo.do“)publicvoiddisplayHeaderInfo(CookieValue(“JSESSIONID“)Stringcookie){}即把JSESSIONID的值绑定到参数cookie上。、RequestParam,RequestBodyRequestParamA常用来处理简单类型的绑定,通过Request.getParameter()获取的String可直接转换为简单类型的情况(String--》简单类型的转换操作由ConversionService配置的转换器来完成;因为使用request.getParameter()方式获取参数,所以可以处理get方式中queryString的值,也可以处理post方式中bodydata的值;B用来处理Content-Type:为application/x-www-form-urlencoded编码的内容,提交方式GET、POST;C)该注解有两个属性:value、required;value用来指定要传入值的id名称,required用来指示参数是否必须绑定;示例代码:ControllerRequestMapping(“/pets“)SessionAttributes(“pet“)publilassEditPetForm{RequestMapping(method=RequestMethod.GET)publicStringsetupForm(RequestParam(“petId“)intpetId,ModelMapmodel){Petpet=this.clinic.loadPet(petId);model.addAttribute(“pet“,pet);return“petForm“;}RequestBody该注解常用来处理Content-Type:不是application/x-www-form-urlencoded编码的内容,例如application/json,application/xml等;它是通过使用HandlerAdapter配置的HttpMessageConverters来解析postdatabody,然后绑定到相应的bean上的。因为配置有FormHttpMessageConverter,所以也可以用来处理application/x-www-form-urlencoded的内容,处理完的结果放在一个MultiValueMap《String,String》里,这种情况在某些特殊需求下使用,详情查看FormHttpMessageConverterapi;示例代码:viewplaincopyprint?RequestMapping(value=“/something“,method=RequestMethod.PUT)publicvoidhandle(RequestBodyStringbody,Writerwriter)throwsIOException{writer.write(body);}、SessionAttributes,ModelAttributeSessionAttributes:该注解用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用。该注解有value、types两个属性,可以通过名字和类型指定要使用的attribute对象;示例代码:viewplaincopyprint?ControllerRequestMapping(“/editPet.do“)SessionAttributes(“pet“)publilassEditPetForm{//...}ModelAttribute该注解有两个用法,一个是用于方法上,一个是用于参数上;用于方法上时:通常用来在处理RequestMapping之前,为请求绑定需要从后台查询的model;用于参数上时:用来通过名称对应,把相应名称的值绑定到注解的参数bean上;要绑定的值来源于:ASessionAttributes启用的attribute对象上;BModelAttribute用于方法上时指定的model对象;C上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中。用到方法上ModelAttribute的示例代码:viewplaincopyprint?//Addoneattribute//Thereturnvalueofthemethodisaddedtothemodelunderthename“aount“//YoucancustomizethenameviaModelAttribute(“myAount“)ModelAttributepublicAountaddAount(RequestParamStringnumber){returnaountManager.findAount(number);}这种方式实际的效果就是在调用RequestMapping的方法之前,为request对象的model里put(“aount”,Aount;用在参数上的ModelAttribute示例代码:viewplaincopyprint?RequestMapping(value=“/owners/{ownerId}/pets/{petId}/edit“,method=RequestMethod.POST)publicStringprocessSubmit(ModelAttributePetpet){}首先查询SessionAttributes有无绑定的Pet对象,若没有则查询ModelAttribute方法层面上是否绑定了Pet对象,若没有则将URItemplate中的值按对应的名称绑定到Pet对象的各属性上。

  ⑹jsp里面的属性,求解释下

  ⑺form表单提交时modelAttribute绑定后天接收的对象,path绑定对象的属性

  ⑻springmvc提交表单数据用ModelAttributeUseruser方式接收,但是却接收不到user_id和username

  ⑼是不是接收不到user_id,从你的get方法,理论上,你的那个类的字段名称应为userId,而username则应为userName,所以,你应该改jsp页面为userId,userName,注意大小写,或者类中改成user_id,username。是不是呢?springmvc是根据get方法和set方法来取值和存值的,如果你只改了类的字段,没有更新对应的get,set方法,那样是不行的!------最后,希望采纳!毕竟我们纯手打!

  ⑽Spring问题,帮忙详解下,ModelAttribute与RequestParam的意义吧,谢谢

  ⑾你的理解是对的。:被ModelAttribute注释的方法会在此controller每个方法执行前被执行:ModelAttribute(“bulletinCategory“)BulletinCategorybulletinCategory注释方法参数,参数user的值来源于getBulletinCategoryBean()方法中的model属性。

  ⑿SpringJSR验证,为什么在页面上使用form:error显示不了错误信息

  ⒀说明你对jsr的自定义类型转化器ConversionService没有了解,你虽然model里面已经添加了jsp中的modelAttribute的模型,但是你modelAttribute中的名字没有对应你的PortalUser类中的名字,应该jsp中modelAttribute=“”portalUser“”,你就可以解决你的问题备注:在jsp中的modelAttribute必须要modelAttribute=“POJO类名小写“,原理和springmvc.xml中配置conversionService的默认bean一样意思

  ⒁ModelMap,ModelAndView和Modelattribute的区别

  ⒂首先介绍ModelMap和ModelAndView的作用

  ⒃ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。

  ⒄modelmap本身不能设置页面跳转的url地址别名或者物理跳转地址,那么我们可以通过控制器方法的返回值来设置跳转url地址别名或者物理跳转地址。

  ⒅ModelAndView

  ⒆ModelAndView对象有两个作用:

  ⒇作用一设置转向地址(这也是ModelAndView和ModelMap的主要区别)

  ⒈作用二用于传递控制方法处理结果数据到结果页面,也就是说我们把需要在结果页面上需要的数据放到ModelAndView对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。

  ⒉接下来介绍使用方法:

  ⒊ModelMap的实例是由bbossmvc框架自动创建并作为控制器方法参数传入,用户无需自己创建。

  ⒋ModelAndView

  ⒌ModelAndView的实例是由用户手动创建的,这也是和ModelMap的一个区别。

  ⒍ModelAttribute

  ⒎ModelAttribute注解的返回值会覆盖RequestMapping注解方法中的ModelAttribute注解的同名命令对象

  ⒏如何利用ModelAttribute来简化控制层代码操作

  ⒐ControllerRequestMapping(value=“${adminPath}/check/dailyCheckItems“)publilassDailyCheckItemsControllerextendsBaseController{AutowiredprivateDailyCheckItemsServicedailyCheckItemsService;AutowiredprivateOfficeServiceofficeService;ModelAttributepublicDailyCheckItemsget(RequestParam(required=false)Stringid){DailyCheckItemsentity=null;if(StringUtils.isNotBlank(id)){entity=dailyCheckItemsService.get(id);}if(entity==null){entity=newDailyCheckItems();}returnentity;}RequiresPermissions(“check:dailyCheckItems:view“)RequestMapping(value={“list“,““})publicStringlist(DailyCheckItemsdailyCheckItems,Modelmodel){List《DailyCheckItems》list=Lists.newArrayList();List《DailyCheckItems》dailyCheckItemsList=dailyCheckItemsService.findList(dailyCheckItems);DailyCheckItems.sortList(list,dailyCheckItemsList,““);model.addAttribute(“list“,list);return“modules/check/dailyCheckItemsList“;}}

  ⒑requestbody和modelattribute的区别

  ⒒他们的区别在于:requestbody指的是请求主体;求体。modelattribute指的是模型属性值。例句辨析:requestbody、Thevocabularyfortherequestbodyisspecifiedbytheserver.请求体的词汇表由服务器指定。、Listingshowsamessagehandlerthatreadstherequestbodywhiletherequestisbeingsent.清单显示了一个消息处理程序,用于在发送请求时读取请求主体。、Now,AgavicanautomaticallyreadandconvertaURL-encodedrequestbodyintoindividualrequestparameters.现在,Agavi可以自动读取URL编码的请求主体并将之转换为单个请求参数。modelattribute、Collectionsarecharacterizedbyamodelattributedefiningthetypeofmodelsposingthecollection.集合具有一个模型属性的特性,定义了组成该集合的模型类型。、Toimproveperformance,youmaywishtofactoroutthecodeforeachmodelattributeintoitsownmethod(orasinglemethodwitha“switch“).为了提高性能,您可能希望抽取每个模型属性的代码放到它自己的方法中(或者带有“开关”的单个方法。、Asaprocessmodelattribute,thisopennessisacriticalfactorbecauseitallowsseamlessintegration,whichisagreatadvantagewhenmunicatingchangeprocessesandprocessimprovement.作为一个过程模型属性,这种公开性是一个关键因素,因为它导致无缝集成,当通讯改变过程或过程改进发生时,无缝集成是一个重要优势。

您可能感兴趣的文章:

相关文章