Spring mvc SpringMVC将id绑定到模型中的对象
代码如下所示: 传感器等级:Spring mvc SpringMVC将id绑定到模型中的对象,spring-mvc,binding,Spring Mvc,Binding,代码如下所示: 传感器等级: @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) @Co
@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为null
因为我只从jsp向SensorController发送SensorType“id”
控制器需要一个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";
}
}
如何解决此问题?解决此问题的典型方法是指定转换器,如下所示:
public class IdToSensorTypeConveter implements Converter<Integer, SensorType>{
...
@Override
public SensorType convert(Integer id) {
return this.sensorTypeDao.findById(id);
}
}
公共类idToSensorTypeConverter实现转换器{
...
@凌驾
公共传感器类型转换(整数id){
返回此.sensorTypeDao.findById(id);
}
}
将此转换器注册为弹簧:
<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"/>
现在,如果您提交的表单在sensor fields中有sensorType字段,它将自动绑定到上述转换器返回的sensorType。我尝试了此操作,但id似乎没有自动绑定,我仍然得到空对象。问题已解决。表单中对SensorType id的引用错误。