1.首先在jsp页面添加一行引用spring表单标签的声明
<!-- 引用spring标签声明 -->
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
2.下面是一个使用<form:form>表单标签的实例, 它最终将生成1个HTML的form表单
<form:form modelAttribute="user" action="saveUser.html">
用户名:<form:input path="userName" />
<br>
<div id="userNameTip" style="width: 300px"></div>
密码:<form:password path="password" />
<br>
<div id="passwordTip" style="width: 300px"></div>
<input type="submit" id="regBtn" value="注册" οnclick="return jQuery.formValidator.pageIsValid('1');" />
<input type="reset" value="重置" />
</form:form>
其实此时spring form标签只是帮我们简化了书写input id 和 name
客户看到的jsp页面, 通过F12查看元素, 则能看到真面目
<form id="user" action="saveUser.html" method="post">
用户名:<input id="userName" name="userName" type="text" value="">
<br>
<div id="userNameTip" style="width: 300px"></div>
密码:<input id="password" name="password" type="password" value="">
<br>
<div id="passwordTip" style="width: 300px"></div>
<input type="submit" id="regBtn" value="注册" οnclick="return jQuery.formValidator.pageIsValid('1');">
<input type="reset" value="重置">
</form>
这个就是比较熟悉的表单格式了, 所以form标签只是做了一个翻译
3.Java后台Controller部分
@RequestMapping("/reg.html")
public ModelAndView reg(HttpServletRequest request,User user) throws Exception {
request.setAttribute("user", user);
return new ModelAndView("reg");
}
注意: 此处必须有user对象存入request带回到reg.jsp页面, 否则会报500异常. 原因是在request中找不到名字是user的对象. 因为modelAttribute数据模型,指定了"user",
这里处理的user对象, 会被带到页面的表单中反显出来, 根据的是path属性, 对应的是user domain的属性, 如果path指定了user没有的属性, 也会报找不到user的某个属性错误.
其实和El表达式反显数据的道理一样, 也可以集联, 例如: 员工所属部门: <form:input path="dept.deptName"> 则取user domain中的dept属性的deptName的值
4.验证部分结合了formvalidtor, 用法和普通form是一样的
详见: formvalidtor使用总结
5.Spring表单的更多标签
我补充的:
表单模型是实体类goods, 其中goods中有goodsType属性 而goodsType是一个对象, 这里select的用法
<form:form modelAttribute="goods" action="goods/saveGoods.html" method="post">
goodsItems是后台返回的List<GoodsType> 这样的一个集合 后台代码: request.setAttribute("goodsItems", list);
<form:select path="goodsType.goodsTypeId" class="form-control">
<form:options items="${goodsItems}" itemLabel="typeName" itemValue="goodsTypeId"/>
</form:select>
这样写, 传到后台, 就会把goodsTypeId赋值到goods对象的goodsType的goodsTypeId属性上, 但是如果还想传typeName的值到后台, 我的想法是写js方法实现, 不知道有没有更好的方法实现