Spring MVC 3 - <form:select>中的自定义标签

Mic*_*rek 5 forms spring jsp spring-mvc

我正在创建一个表单,用户可以选择(以及其他)产品的工厂.

每个工厂都由ID和ID标识,并具有特定的地址.

我想在以下代码中使用自定义标签:

<form:select items="${factories}" path="factory" itemValue="id" itemLabel="..."/>
Run Code Online (Sandbox Code Playgroud)

起初我尝试使用Spring Formatter功能(org.springframework.format.Formatter接口),但是当我这样做时,当我删除"itemLabel"属性以通过Formatter自动显示时:

<form:select items="${factories}" path="factory" itemValue="id"/>
Run Code Online (Sandbox Code Playgroud)

但是,如果设置了(在编辑的情况下),则没有选择正确的值.

然后我试着:

<form:select path="factory" itemValue="id">
    <c:forEach ...>
         <form:option value="${factory.id}" label="${factory.address.city} ${factory.address.street}"
    </c:foreach>
</form:select>
Run Code Online (Sandbox Code Playgroud)

但正如在早期的解决方案中,spring没有选择在模型中设置的适当值.

我的问题是:

是否可以以某种方式格式化实体,即:当select字段的值与其标签不同时,select正常工作.

enk*_*kor 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>
Run Code Online (Sandbox Code Playgroud)

Spring将根据name属性(在本例中为'factory')选择'path',因为它将尝试映射到您自动使用的模型对象.

另一种方法是在模型中添加另一个字段,以便根据需要连接和格式化标签.如果它的一个@Entity对象然后创建该字段@Transient.