我有一个Spring复选框:
<spring:url value="/car/save" var="formUrl"/>
<form:form action="${formUrl}" method="POST" modelAttribute="car">
<div class="form-group">
<label for="equipment">Equipment</label>
<form:checkboxes path="equipment" id="equipment" items="${equipmentList}"/>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form:form>
Controler看起来像这样:
@RequestMapping(value="/add",method=RequestMethod.GET)
public String addCar(Model model){
List<String> equipment = new LinkedList<>(Arrays.asList(new String[]{"AC","ABS","ESP","GPS","Cabrio"}));
model.addAttribute("car",new Car());
model.addAttribute("equipmentList",equipment);
return "addCar";
}
和汽车实体:
@Entity
@Table(name="CAR")
public class Car {
@Id
@Column(name="CAR_ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long carId;
@Column(name="EQUIPMENT")
private String[] equipment;
}
当我第一次尝试持久化Car实体时,我得到了一个例外,因为db表的值太长了。我将它改为200个字符,但现在我最终得到: 如何从Spring复选框中存储值?
答案 0 :(得分:0)
在JPA中存储属性集合的方法有很多种。您可以告诉JPA使用分隔符(例如“|”)在VARCHAR单元格中存储String属性。或者,您可以在Car实体和属性(设备)实体(JOIN)之间创建更复杂的关联。我宁愿选择后者,因为我喜欢E-R约束以及为这些属性添加字段(例如描述)的灵活性。 如果允许多个相同值的条目,您的“设备”应该是一组内容或列表。当您从POST表单中获取String []时,您将通过该数组并相应地更改/填充Set(JPA字段)。你现在可能正在存储引用而不是值,这就是为什么你会得到那种乱码。