SpringMVC视图、表单

来源:互联网 发布:如何提高淘宝权重 编辑:程序博客网 时间:2024/05/24 01:39

1、视图对象
不同类型的视图实现技术对应不同的View实现类,视图对象由视图解析器负责实例化,因为视图Bean是无状态的,所以不会有线程安全的问题。
这里写图片描述

2、视图解析器
视图解析器将一个逻辑视图名解析为一个具体的视图对象。
这里写图片描述
可以选择一种视图解析器或混用多种视图解析器,可以通过orderNo属性指定解析器的优先顺序,值越小优先级越高。其中ContentNegotiatingViewResolver默认是最高优先级,InternalResourceViewResolver默认是最低优先级。

SpringMVC会按照视图解析器的优先级顺序对逻辑视图名进行解析,直到解析成功并返回试图对象。

2、JSP和JSTL

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>        <property name="prefix" value="/WEB-INF/views/"/>        <property name="suffix" value=".jsp"/>    </bean>

3、Spring表单标签
通过Spring表单标签,可以很容易将模型数据中的表单/命令对象绑定到HTML表单元素中。
在使用表单标签之前,要在JSP页面添加一行声明:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

一般情况下,通过GET请求获取表单页面,通过POST请求提交表单页面,因此,获取表单和提交表单的URL是相同的。所以不需通过action属性指定提交的目标URL。

这里写图片描述
这里写图片描述

这些标签大都拥有以下属性:
1、path:用属性路径表示的表单对象属性,如userName,dept.deptName
2、htmlEscape:绑定的表单属性值是否要对HTML特殊字符进行转换,默认是true
3、cssClass:表单组件对于的css样式
4、cssErrorClass:表单组件的数据存在错误时,采用的css样式

关于复选框、下拉框和单选框与表单对象属性的映射问题。
当HTML页面中的所有复选框没有勾选时,表单提交所对应的HTTP请求报文不会包含该复选框的参数名,所以会造成表单数据绑定出现问题,无法调用表单对象的set方法。(如果这个表单对象已经缓存到session中,且原来是有值的,现在提交之后,没有勾选,并不会导致该属性被置为空,造成数据的不一致)

解决的办法是在每个复选框后添加一个隐藏组件,在对于的复选框名字前添加下划线,作为隐藏组件的名字。告诉SpringMVC存在这样一个复选框,保证服务器端的表单对象和页面中的表单组件数据的一致性。