1. 表单标签
通过SpringMVC的表单标签可以实现将模型数据中的属性和HTML表单元素相绑定,以实现表单数据更便捷编辑和表单值的回显。
1.1 数据绑定
可以通过其modelAttribute属性指定当前表单标签所绑定的模型属性;若未指定该属性,则默认从request域对象中读取名为command的表单Bean,若不存在则报错。
换而言之,SpringMVC的表单标签无论是否用于回显都必须提供属性与表单字段名一致的对象。
1.2 共有属性
SpringMVC提供了多个表单组件标签,如<form:input/>
和<form:select/>
等,用以绑定表单字段的属性值,其共有属性说明如下:
共有属性 | 具体描述 |
---|---|
path | 表单字段,对应HTML元素的name属性,其支持级联属性 |
htmlEscape | 是否对表单值的HTML特殊字符进行转换,默认为true |
cssClass | 表单组件对应的CSS样式类名 |
cssErrorClass | 表单组件的数据存在错误时所采取的CSS样式类名 |
1.3 form:radiobuttons
单选框组标签,用于构造多个单选框,具体属性说明如下:
属性名 | 具体描述 |
---|---|
items | List、String[]或Map |
itemValue | 指定radio的value值,可以是集合中bean的一个属性值 |
itemLabel | 指定radio的label值 |
delimiter | 指定多个单选框之间的分隔符,如<br> |
<%
Map<String, String> genders = new HashMap<String, String>();
genders.put("1", "Male");
genders.put("0", "Female");
request.setAttribute("genders", genders);
%>
Gender:<form:radiobuttons path="gender" items="${genders }"/><br><br>
1.4 form:errors
显示表单组件或数据校验所对应的错误,具体说明如下:
<form:errors path="*" />
:显示表单中的所有错误;
–<form:errors path="user*" />
:显示表单中所有以user为前缀的属性所对应的错误;
–<form:errors path="username" />
:显示表单中特定对象属性的错误。
1.5 其他标签
表单标签 | 具体说明 |
---|---|
form:input、form:password、 form:hidden、form:textarea | 对应 HTML表单的text、password、hidden、textarea标签 |
form:radiobutton | 单选框组件标签,当表单bean对应的属性值和value值相等时,单选框被选中 |
form:checkbox | 复选框组件,用于构造单个复选框 |
form:checkboxs | 用于构造多个复选框,使用方式同form:radiobuttons标签 |
form:select | 用于构造下拉框组件,使用方式同form:radiobuttons标签 |
form:option | 下拉框选项组件标签,使用方式同form:radiobuttons标签 |
2. 静态资源处理
前提条件:优雅的REST风格的资源URL不希望带.html或.do等后缀。
面临问题:若将DispatcherServlet的请求映射配置为“/”,则SpringMVC将捕获WEB容器的所有请求;包括静态资源的请求,SpringMVC会将其作为普通请求处理,进而因找不到对应处理器将导致错误。
解决方案:在SpringMVC的配置文件中配置<mvc:default-servlethandler/>
,并配置<mvc:annotation-driven></mvc:annotation-driven>
,说明如下:
<mvc:default-servlet-handler/>
将在SpringMVC上下文中定义一个DefaultServletHttpRequestHandler,其会对进入DispatcherServlet的请求进行筛查,如果发现是没有经过映射的请求,则将该请求交由WEB应用服务器默认的Servlet处理,否则经由DispatcherServlet继续处理;- 一般WEB应用服务器默认的Servlet的名称均是default;若所使用的WEB服务器的默认Servlet名称不是default,则需要通过defaultservlet-name属性来显式指定。
<!--
关于SpringMVC处理静态资源的问题:
1). DispatcherServlet的请求映射配置为“/”,即SpringMVC将捕获WEB容器的所有请求
2). 静态资源的请求如scripts/jquery-1.7.2.js会被捕获,会因找不到对应处理器将导致错误
3). 而优雅的REST风格的资源URL不希望带.do等后缀,即不能使用“/*.do”
解决办法:
1). 在SpringMVC配置文件中,配置<mvc:default-servlet-handler/>
2). 且需要配置<mvc:annotation-driven></mvc:annotation-driven>
-->
<script type="text/javascript" src="scripts/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function() {
$(".delete").click(function(){
var href = $(this).attr("href");
$("form").attr("action", href).submit();
return false;
});
});
</script>