【问题标题】:Spring MVC bind id to an object in a ModelSpring MVC 将 id 绑定到模型中的对象
【发布时间】:2012-08-24 07:49:40
【问题描述】:

代码如下所示:

传感器类:

@Entity
@Table(name = "sensor")
public class Sensor {

@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@ManyToOne
private SensorType sensorType;

@NotEmpty
@Size(min = 3, max = 255)
@Column(name = "name")
private String name;
    ......
}

传感器类型:

@Entity
@Table(name = "sensortype")
public class SensorType {

@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(name = "type")
private String type;
    ......
}

尝试插入新传感器时出现错误,SensorType 为空 因为我只是将 SensorType“id”从 jsp 发送到 SensorController 并且控制器需要一个 SensorType 对象。

传感器控制器:

@Controller
public class SensorController {

@Autowired
private ISensor sensorService;

@RequestMapping(value = "/sensor/add", method = RequestMethod.POST)
public String add(Sensor sensor, BindingResult result, Model model) {

     if (result.hasErrors()) {
                return "sensorAdd";
             }       

     sensorService.insert(sensor);
     return "redirect:/sensors";
  }
}

我该如何解决这个问题?

【问题讨论】:

    标签: spring-mvc binding


    【解决方案1】:

    解决这个问题的典型方法是指定一个转换器,这样:

    public class IdToSensorTypeConveter implements Converter<Integer, SensorType>{
        ...
        @Override
        public SensorType convert(Integer id) {
            return this.sensorTypeDao.findById(id);
        }
    
    }
    

    用 Spring 注册这个转换器:

    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="IdToSensorTypeConveter"/>
            </set>
        </property>
    </bean>
    
    <mvc:annotation-driven conversion-service="conversionService"/> 
    

    现在,如果您提交的表单在传感器字段中有一个sensorType字段,它将自动绑定到上述转换器返回的sensorType。

    【讨论】:

    • 我试过了,但 id 似乎没有自动绑定,我仍然得到空对象。
    • 问题已解决。表单中对 SensorType id 的引用错误。
    猜你喜欢
    • 2013-12-24
    • 2016-06-30
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多