SpringMVC处理ModelAndView、视图解析器

1.处理模型数据
如果跳转时需要带 数据:V、M,则可以使用以下方式:
 ModelAndView、ModelMap  、Map、Model   -数据放在了 request作用域 

index.jsp

<br/>
	<a href="handler/testModelAndView">testModelAndView</a>
<br/>
<br/>
	<a href="handler/testModelMap">testModelMap</a>
<br/>
<br/>
	<a href="handler/testMap">testMap</a>
<br/>
<br/>
	<a href="handler/testModel">testModel</a>
<br/>

handler.java

@RequestMapping(value="testModelAndView")
public ModelAndView testModelAndView() {//ModelAndView:既有数据,又有视图
	//ModelAndView:Model -M     View-V
	ModelAndView mv = new ModelAndView("success");//view:  views/success.jsp 

	Student student = new Student() ;
	student.setId(2);
	student.setName("zs");

	mv.addObject("student", student);//相当于request.setAttribute("student", student);
	return mv;
}

@RequestMapping(value="testModelMap")
public String testModelMap(ModelMap mm) {//success

	Student student = new Student() ;
	student.setId(2);
	student.setName("zs");

	mm.put("student2", student);//request域

	return "success";  //view
}

@RequestMapping(value="testMap")
public String testMap(Map<String,Object> m) {

	Student student = new Student() ;
	student.setId(2);
	student.setName("zs");
	m.put("student3", student);//request域

	return "success";
}

@RequestMapping(value="testModel")
public String testModel(Model model) {

	Student student = new Student() ;
	student.setId(2);
	student.setName("zs");
	model.addAttribute("student4",student);//request域
	return "success";
}

 success.jsp

requestScope取值

==== request:<br/>
${requestScope.student.id } -${requestScope.student.name } <br/>
${requestScope.student2.id } -${requestScope.student2.name }  <br/>
${requestScope.student3.id } -${requestScope.student3.name }  <br/>
${requestScope.student4.id } -${requestScope.student4.name }  <br/>

======================================================== 

@SessionAttributes、@ModelAttribute示例:

public String testModel(Model model|    Map<String,Object> m) {

m.put(x,"..");// 就会将x对象 放入request域中


如何将上述数据放入session中?@SessionAttributes(..)

//@SessionAttributes(value="student4")  //如果要在request中存放student4对象,则同时将该对象 放入session域中
//@SessionAttributes(types= {Student.class,Address.class})  //如果要在request中存放Student类型的对象,则同时将该类型对象 放入session域中
@Controller
@RequestMapping(value="handler") //映射
public class SpringMVCHandler {
。。。。。
}

======================================================== 

@ModelAttribute 
i. 经常在 更新时使用
ii. 在不改变原有代码的基础之上,插入一个新方法。

通过@ModelAttribute修饰的方法 ,会在每次请求前先执行;
并且该方法的参数map.put()可以将 对象 放入 即将查询的参数中;


必须满足的约定
         map.put(k,v) 其中的k 必须是即将查询的方法参数 的首字母小写
         testModelAttribute(Student xxx)  ,即student;
     如果不一致,需要通过@ModelAttribute声明。如下:
 @ModelAttribute  //在任何一次请求前,都会先执行@ModelAttribute修饰的方法
        

@ModelAttribute//在任何一次请求前,都会先执行@ModelAttribute修饰的方法
public void queryStudentById(Map<String,Object> map) {
      //StuentService stuService = new StudentServiceImpl();
      //Student student = stuService.queryStudentById(31);
      //模拟调用三层查询数据库的操作
       Student student = new Student();
       student.setId(31);
       student.setName("zs");
       student.setAge(23);
       map.put("stu", student) ;//约定:map的key 就是方法参数 类型的首字母小写
 }

        //修改:Zs-ls        

@RequestMapping(value="testModelAttribute")
public String testModelAttribute(@ModelAttribute("stu")Student student) {
   student.setName(student.getName());//将名字修改为ls
             
   System.out.println(student.getId()+","+student.getName()+","+student.getAge());
   return "success";
}

==================================================
一个Servlet 对应一个功能:
增删改查  对应于 4个Servlet


更新:    Servlet  相当于 - SpringMVC的 Controller

//查询
@ModelAttribute
public void query()
{

}
//修改

public void update()
{

}

@ModelAttribute会在 该类的每个方法执行前 均被执行一次,因为使用时需要注意。

=============================================================
2.视图、视图解析器

视图的顶级接口:View
视图解析器:ViewResolver

常见的视图和解析器:
InternalResourceViewInternalResourceViewResolver

public class JstlView extends InternalResourceView:

springMVC解析jsp时 会默认使用InternalResourceView, 
如果发现Jsp中包含了jstl语言相关的内容,则自动转为JstlView。

JstlView 可以解析jstl\实现国际化操作

国际化: 针对不同地区、不同国家 ,进行不同的显示 

 
中国:(大陆、香港)     欢迎
美国:            welcome  

i18n_zh_CH.properties        
resource.welcome=你好
resource.exist=退出

i18n.properties    

        
具体实现国际化步骤:
a.创建资源文件
基名_语言_地区.properties
基名_语言.properties

b.配置springmvc.xml,加载资源文件  

  <!-- 加载国际化资源文件 -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="i18n"></property>
    </bean>


ResourceBundleMessageSource会在springmvc响应程序时 介入(解析国际化资源文件)

c.通过jstl使用国际化
    jstl.jar  standar.jar
    
springmvc在启动时,会自动查找一个id="messageSource"的bean,如果有  则自动加载


 

猜你喜欢

转载自blog.csdn.net/weixin_40569991/article/details/87650691