我正在创建一个表单,用户可以在其中选择(以及其他)产品的工厂。
每个工厂都由ID标识并具有特定地址。
我想在以下代码中使用自定义标签:
<form:select items="${factories}" path="factory" itemValue="id" itemLabel="..."/>
起初我尝试使用Spring Formatter功能(org.springframework.format.Formatter接口),但是当我这样做时,当我删除“itemLabel”属性以通过Formatter自动显示时:
<form:select items="${factories}" path="factory" itemValue="id"/>
但是如果设置了它(如果是编辑的话),则没有选择正确的值。
然后我试着:
<form:select path="factory" itemValue="id">
<c:forEach ...>
<form:option value="${factory.id}" label="${factory.address.city} ${factory.address.street}"
</c:foreach>
</form:select>
但是在早期的解决方案中,spring没有选择在模型中设置的正确值。
我的问题是:
是否可以通过以下方式格式化实体:选择字段的值与其标签不同时,选择正常工作。
答案 0 :(得分:5)
我遇到了同样的问题,问题是表单:选项值和标签直接映射到属性,而不是具有指定jstl的灵活性。
所以你必须手动摇动html,如:
<select name="factory">
<c:forEach var="factory" items="${factories}" >
<option value="${factory.id}" label="${factory.address.city} ${factory.address.street}"/>
</c:forEach>
</select>
Spring将根据name属性(在本例中为'factory')选择'path',因为它将尝试映射到您自动使用的模型对象。
另一种方法是在模型中添加另一个字段,以便根据需要连接和格式化标签。如果是@Entity
对象,则创建字段@Transient
。
答案 1 :(得分:-1)
您还可以覆盖Factory类
中的 toString()方法 @Override
public String toString() {
return "desired string";
}
然后在你的jsp中
<form:select items="${factories}" itemValue="id" path="factory"/>