目前所在的公司,前端页面用的spring的表单,初次使用此种表单,难免遇到"坑",总结一下开发过程中遇到的问题。
1、表单特性
以input框举例,一般的写法就是<input id="age" name="age" type="text" >
spring的表单写法是<form:input id="age" path="age" type="text">,这里path就是一个特性了。
2、回显特性
以input框举例,一般的写法<input id="age" name="age" type="text" value="${age}" >
spring的表单写法是<form:input id="age" path="age" type="text" value="${age}">
或者是 spring的表单写法是<form:input id="age" path="age" type="text">,跟spring表单普通的写法是一样,会做到自动回显的。
以上所说的无论是name还是path属性都必须与表单提交的action里的实体类中的名字相对应。
3、重点介绍下select下拉框反显的使用
<form:select id="provinceCode" path="provinceCode" htmlEscape="false"
class="required input-xlarge" style="width:150px" οnchange="getCityList()">
<option value="">请选择</option>
<c:forEach items="${provinceList}" var="item" varStatus="status">
<form:option value="${item.code }">${item.name }</form:option>
</c:forEach>
</form:select>
path引号里的名字,要与Controller里实体类的名字保持一致。
工作中遇到的一个问题,花了超过半小时才解决的。
<form:form id="searchForm" modelAttribute="tCdMember" action="${ctx}/member/memberList"
method="post" class="breadcrumb form-search">
</form:form>
form里的modelAttribute双引号括起来的名字一定是Controller里放到model域里了,否则不能反显。
@RequestMapping(value="updateMember")
public String updateMember(TCdMember tCdMember, HttpServletRequest request,
HttpServletResponse response, Model model) {
tCdMember = Service.selectByPrimaryKey(id);
model.addAttribute("tCdMember", tCdMember);
return "";
}