最近在做表单,遇到了将checkbox的value保存到数据库的问题。
在JSP页面上可以使用form:checkbox标签,和字符串数组进行绑定。
在Controller的方法中,可以用(String[] arr)作为参数,接收checkbox传来的值。
这样把问题转化为,字符串数组和字符串互相转化。
可以用","作为分隔符,合并多个value(不过要注意value中不要再有分割符了)
之后看测试页面test.jsp,有如下表单:
运行访问test.jsp可以看到如下页面:
在JSP页面上可以使用form:checkbox标签,和字符串数组进行绑定。
在Controller的方法中,可以用(String[] arr)作为参数,接收checkbox传来的值。
这样把问题转化为,字符串数组和字符串互相转化。
可以用","作为分隔符,合并多个value(不过要注意value中不要再有分割符了)
例如我们有Fruit类(对应数据库中的fruit表,其中name字段是我们要和页面上的checkbox相互对应的)
import org.apache.commons.lang.StringUtils;
public class Fruit {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 添加字符串数组和字符串互相转化的适配方法
public String[] getNameArr(){
return this.name.split(",");
}
public void setNameArr(String[] nameArr){
this.name = StringUtils.join(nameArr, ",");
}
}
之后看测试页面test.jsp,有如下表单:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<form:form commandName="fruit" action="fruit.json" method="post">
<form:checkbox value="apple" path="nameArr" /> Apple
<form:checkbox value="banana" path="nameArr" /> Banana
<form:checkbox value="orange" path="nameArr" /> Orange
<form:checkbox value="peach" path="nameArr" /> Peach
<input type="submit" />
</form:form>
最后在Controller中添加地址映射
@RequestMapping("/test")
public String test(Model model) {
Fruit fruit = new Fruit();
fruit.setName("apple,banana");
model.addAttribute("fruit", fruit);
return "test";
}
@RequestMapping("/fruit.json")
@ResponseBody
public Fruit fruitJson(Fruit fruit){
return fruit;
}
运行访问test.jsp可以看到如下页面:
JSP页面处理<form:checkbox> 中的path时,会执行getNameArr()方法,"apple,banana" 就被转化成了{"apple","banana"}
再测setNameArr(String[] nameArr)方法,选中几个checkbox,提交表单
结果如下:
{
"name": "apple,orange,peach",
"nameArr": [
"apple",
"orange",
"peach"
]
}