Spring复选框持续失败

时间:2015-09-15 12:53:19

标签: java spring hibernate spring-mvc

我有一个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个字符,但现在我最终得到: enter image description here 如何从Spring复选框中存储值?

1 个答案:

答案 0 :(得分:0)

在JPA中存储属性集合的方法有很多种。您可以告诉JPA使用分隔符(例如“|”)在VARCHAR单元格中存储String属性。或者,您可以在Car实体和属性(设备)实体(JOIN)之间创建更复杂的关联。我宁愿选择后者,因为我喜欢E-R约束以及为这些属性添加字段(例如描述)的灵活性。 如果允许多个相同值的条目,您的“设备”应该是一组内容或列表。当您从POST表单中获取String []时,您将通过该数组并相应地更改/填充Set(JPA字段)。你现在可能正在存储引用而不是值,这就是为什么你会得到那种乱码。

类似问题JPA: Store a list of integers in a single field