0

コードは次のようになります。

センサークラス:

@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";
  }
}

どうすればこれを解決できますか?

4

1 に答える 1

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 に自動的にバインドされます。

于 2012-08-23T22:54:02.977 に答える