【问题标题】:Spring MVC 3 - custom labels in <form:select>Spring MVC 3 - <form:select> 中的自定义标签
【发布时间】:2012-02-23 19:40:21
【问题描述】:

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

每个工厂都由 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 没有选择模型中设置的正确值。

我的问题是:

Is it possible to format entity in a way, that form:select works properly, when a value of select field is not the same as its label.

【问题讨论】:

    标签: forms spring jsp spring-mvc


    【解决方案1】:

    我也遇到了同样的问题,问题是form:option值和label直接映射到一个属性,而不是灵活地指定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 将根据名称属性(在本例中为“工厂”)选择“路径”,因为它会尝试自动映射到您正在使用的模型对象。

    另一种方法是在模型中添加另一个字段以根据需要连接和格式化标签。如果它是一个@Entity 对象,则将字段设为@Transient。

    【讨论】:

      【解决方案2】:

      你也可以重写Factory类中的toString()方法

       @Override
          public String toString() {
              return "desired string"; 
      }
      

      然后在你的jsp中

      <form:select items="${factories}" itemValue="id" path="factory"/>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-10
        • 1970-01-01
        • 2010-10-01
        • 2013-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-16
        相关资源
        最近更新 更多