JAVA 如何获取modelandview的返回值,如果把一个对象放在map集合里(假如集合名字是

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 如何获取modelandview的返回值,如果把一个对象放在map集合里(假如集合名字是相关的知识,希望对你有一定的参考价值。

JAVA 如何获取modelandview的返回值,如果把一个对象放在map集合里(假如集合名字是data,实体类名字是teacher,里面有属性 name)通过modelandview传到前端页面 然后怎么获取里面的值呢 ? 要想拿到name值是直接用teacher.name吗 不要先获取data再遍历吗

1、使用ModelAndView作为返回值,首先在方法头中进行声明:

public ModelAndView getNameById(HttpServletRequest request,HttpServletResponse response) throws Exception

2、然后在方法体中实例化ModelAndView。

ModelAndView mv=this.getAutoView().addObject("object",object);

3、最后在方法中的末尾加上return mv;

那么mv中的值是什么呢?

ModelAndView: reference to view with name '/officeoa/test/bjqGetNameById.jsp'; model is bjq=com.hotent.officeoa.model.test.Bjq@1d001c5c[id=10000007960011,name=课本,password=12ab,department=测试3,departmentID=,leader=22222,leaderID=]

解析:mv中有一个view值和一个model值。view是我们条转到的页面的地址,model则是页面中会用到的数据。

4、最后附上一个完整的方法及后台输出的值。

参考技术A modelandview返回的时候,
form是一个Object对象,tearcher是Object的一个属性,
return new ModelAndView("/index.jsp","formName",form);
你在jsp里面可以取$formName.teacher.name追问

直接用响应页面用${teacher.name}接收行吗 假如从后台穿的是一个包含teacher的集合

追答

那样是不行的,放在modelAndview里面,必须是一个确定的form对象,你可以比如
public class A{
List list=null

A a = new A();
return new ModelAndView("index.jsp","key",a);

或者直接用request.setAttribute("key",list);,页面上$key

参考技术B teacher.name获取。map相当于request。追问

request不是还要用request.getparamater获取呢 这个直接什么不用用teacher.name就可以了吗

没有什么传递范围吗 只能在modelandview传递的路径下获取吗

追答

request.getParamater是后台获取页面传递过来的参数。你说的是在页面获取值,两个怎么混在一起说?什么叫“modelandview传递的路径下”,不要乱发明名词。传递范围自然是request的范围。

追问

失误咯 想说requestScope.list. var=teacher. 然后才能用 teacher.name的而我看老师的程序里用modelandview后直接用teacher.name了

追答

哎,怕了你了。requestScope.list. var=teacher.
这东西是什么啊,我猜list是map对象的名称,var是teacher对象的名称?等于号是干嘛的?你准备循环?map里面的值是唯一的,循环了干什么。request域对象就类似于map这种键值对的形式,所以直接把map当成request存储就行了。map在MODELANDVIEW对象中是可以选的,在不改动代码的情况下,如果没有map,我就直接使用request设值。我估计spring后台代码做了如下操作。循环map集合,把其中的键值对重新设值到request对象中。

追问

谢谢你的不离不弃的解答

参考技术C 前台页面要用el表达式 或者struts2标签的 iterator遍历出来

告诉你:如何花样使用SpringMVC

文章目录

SpringMVC使用

请求转发

SpringMVC默认响应时使用请求转发方式,返回值可以是ModelAndView,控制器处理方法的返回值如果为ModelAndView,则其即包含视图信息,也包含模型数据信息。如果返回String,可以将数据封装到一个Model对象中,直接返回字符串格式的视图名即可。

返回值为ModelAndView时,相应数据设置:

(1)添加模型数据:addObject(String attributeName,Object attributeValue)

(2)设置视图:void setViewName(String viewName)

//返回ModelAndView 
@GetMapping(path = "/toAddUser")
 public ModelAndView toAddUser(HttpSession session) 
     TUser user = (TUser) session.getAttribute("user");
     Integer communityId = user.getId();
     ModelAndView mv = new ModelAndView("userManage/addUser");
     List<TDept> depts = deptService.toDeptList(communityId);
     mv.addObject("depts", depts);
     return mv;
 

//返回String
@GetMapping(path = "/toUpdate")
public String toUpdateUser(HttpServletRequest request, String id) 
    User user = userService.toUpdateUser(id);
    request.setAttribute("user", user);
    List<Role> roles = userService.findRoles();
    request.setAttribute("roles", roles);
    return "updateUser";

视图解析

我们在controller里面经常这样return一个ModelAndView,DisPatcherServlet靠视图解析器把viewName解析为/jsp/viewname.jsp 常用的视图解析器:InternalResourceViewResolver,其实InternalResourceViewResolver的工作很简单:在视图逻辑名前加上prefix(前缀),后面加上suffix(后缀);前端控制器最终转发到/jsp/viewname.jsp。

配置视图解析器
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
    <property name="prefix" value="/jsp/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>

接收请求

@Controller

Spring配置中指定了自动扫描的basepackage后,Spring会扫描这些包以及子包中的使用了@Controller标识的类,然后将类加入到Spring IOC容器中,注入依赖。需要注意的是这个bean在Spring IOC容器中是单例的,每次请求到来的时候,使用的都是同一个bean对象。

@RequestMapping

这个标签的作用就是与请求匹配,如果匹配上了,所修饰的方法才会被执行。这里需要注意两个属性,一是value/path,一是method。value是path的别名,都指请求的路径,类型是一个String[],也就是说它可以匹配多个请求路径。method指的是请求的方法,如GET、POST。

只有当前请求与@RequestMapping上指定的属性都匹配的时候,才会执行它标注的方法。假定应用的上下文路径为"http://localhost:9090/",那么@RequestMapping(path = “/user”)请求的路径就是"http://localhost:9090/user",请求方式没有限制,既可以是GET,也可以是POST。

@RequestMapping(path = “/user”,method = RequestMethod.GET)请求的路径就是"http://localhost:9090/user",请求方式只能是GET。它等价于GETMapping(path = “/user”)。同理@RequestMapping(path = “/user”,method = RequestMethod.POST)也等价于POSTMapping(path = “/user”)。

获取请求数据

我们编写处理器方法的目的,就是为了处理客户端提交的数据,而客户端的提交时按照HTTP协议报文格式来提交的,下面我们看一下常见的HTTP POST提交的报文来理解报文的各个部分与处理器方法参数的对应关系:

(1)请求方法:对应到@ReuqestMapping中的method。

(2)请求URI:前部分是项目根路径,后面部分对应@RequestMapping中的value/path。

(3)请求头:比如获取User-Agent中的值则使用@RequestHeader(“User-Agent”)。

(4)请求参数:比如获取name参数的值,使用@RequestParam(“name”)来获取。

@Controller 
@RequestMapping("/students")
public class StudentController  					
	@RequestMapping(value="/create",method=RequestMethod.POST) 
	public String create( @RequestParam("name") String name, 
						  @RequestParam("age") Integer age, 
						  @RequestHeader("User-Agent") String userAgent) 
		return null; 
    

按照上面代码的方式就可以获取到参数值,但是如果请求参数的名称与处理器中参数名相同时,那我们可以选择省略@RequestParam绑定,如:

@Controller 
@RequestMapping("/students")
public class StudentController  					
	@RequestMapping(value="/create",method=RequestMethod.POST) 
	public String create( String name, Integer age, 
						  @RequestHeader("User-Agent") String userAgent) 
		return null; 
    

参数列表中还可以直接内置HttpServletRequest,HttpSession,HttpServletResponse等对象。

重定向

控制器方法返回字符串类型的值会被当成逻辑视图名处理,如果返回的字符串中带redirect:前缀时,SpringMVC会对它们进行特殊处理:将redirect:当成指示符,其余字符串作为URL处理。如return “redirect:/page/student/update.jsp”;

过滤静态资源文件

<!--放行过滤静态资源文件请求-->
<mvc:default-servlet-handler/>

当DispatcherServlet的url配置为/时,我们需要在Spring.xml文件中加入此配置,可以访问静态资源。例如.jpg、.js、.css带有后缀名的文件。如果不加此配置,我们的网页就不能引入静态文件资源,会导致网页元素缺失。配置了之后就会在SpringMVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHander,它能够对进入DispacherServlet中的URL进行筛查。如果时静态资源请求,就将请求转由Web应用服务器默认的Servlet处理,如果不是静态资源请求,才会由DispacherServlet继续处理。

中文乱码处理

我们在提交请求的时候,如果输入的是中文就会产生乱码。解决的方法是添加一个过滤器,为request对象设置编码集。SpringMVC中为我们提供了这个过滤器,只需要在web.xml中配置好即可:

<!--springMVC编码过滤器-->
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Ajax返回json

@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式后,写入到response对象的body去,通常用来向异步请求返回JSON数据。需要注意的是,在使用此注解之后不会再走视图处理器,而是直接向数据写入到输入流中,它的效果等同于通过response对象输出指定格式的数据。

添加jackson的jar包

<!--添加json相关jar包 jackson 将java对象转为json格式-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.1</version>
</dependency>
 @ResponseBody
 @RequestMapping(path = "/checkAccount")
 public Integer checkAccount(String account) 
     User user = userService.checkAccount(account);
     if (user != null) 
     	return 1;
      else 
     	return 0;
     
 
 //也可以直接返回对象或对象集合,jackson会自动转换为JSON格式

以上是关于JAVA 如何获取modelandview的返回值,如果把一个对象放在map集合里(假如集合名字是的主要内容,如果未能解决你的问题,请参考以下文章

告诉你:如何花样使用SpringMVC

返回值分类 (voidstring modelAndView)

阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_4 响应之返回值是ModelAndView类型

一篇文章告诉你:如何花样使用SpringMVC

为啥自己搭建的ssm框架 modelandview跳转页面,返回值有了但是页面不跳转?

Spring 控制器方法的返回值类型ModelAndView当中页面当中数据的传输(通过转发和重定向)