データベースからのデータが取り込まれるフォームがあります。私の問題の説明を始める前に、いくつかのスニペット:
1 つのクラス:
// @Entity for areas
public class Area {
@Id
@Column(name = "area")
private String area;
@Column(name = "deleted")
private boolean deleted;
getter/setter
}
セカンドクラス
// @Entity for employees
public class Employee {
@Id
@GeneratedValue
@Column(name = "ID")
private long id;
@ManyToOne
@JoinColumn(name = "area")
private Area area;
@Column(name = "name")
private String name;
getter/setter
jsp にデータを返すために呼び出される EmployeeController のメソッド
protected String createDialog( @PathVariable("id") Long id, Model model ){
Employee employee = id == 0 ? new Employee() : employeeService.findById(id);
//return employee
model.addAttribute("employeeModel", employee );
//add data needed to create dropdown holding areas
//areaService.findAll returns a List<Area>
model.addAttribute("areas", areaService.findAll(
new Sort(
Sort.Direction.ASC,
"area"
)
));
return "employees/dialogUpdateEdit";
}
エリアのドロップダウンと、新しい従業員が返されない場合は既知のデータを示す jsp
<form:form action="employees/ajax" commandName="employeeModel" method="POST" id="createForm">
<table class="fullWidth">
<tr>
<td>Area</td>
<td>
<form:select path="area" items="${areas}" class="fullWidth">
</form:select>
</td>
</tr>
<tr>
<td>Employee Name</td>
<td><form:input path="name" class="fullWidth"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Save Changes" id="btnSaveEmployee" class="fullWidth" />
</td>
</tr>
</table>
<!-- adding hidden field to hold id on update -->
<form:hidden path="id" />
</form:form>
検証を実行し、いくつかのエラーを返すかどうかのコントローラー メソッド
@RequestMapping(value = "/ajax", method = RequestMethod.POST)
protected @ResponseBody ValidationResponse createOrUpdate(
@Validated @ModelAttribute("employeeModel") Employee employee,
BindingResult bindingResult) {
if (!bindingResult.hasErrors()) {
employeeService.createOrUpdate(employee);
}
return validate(employee, null, bindingResult);
}
問題の場合:これはすべて正常に機能し、ドロップダウンが入力され、データが入力に入力されます。しかし、送信をクリックすると、次のエラーが表示されます。
java.lang.IllegalStateException: タイプ [java.lang.String] の値をプロパティ 'area' の必要なタイプ [com.whatever.Area] に変換できません: 一致するエディターまたは変換戦略が見つかりません
私が理解している限り、フォームはリストからオブジェクトをバインドするのではなく、「領域」のプレーン文字列を送信するだけです。
文字列ではなくオブジェクトを送信するフォームを取得するにはどうすればよいですか? 私のバインディングに何か問題がありますか?
ご協力いただきありがとうございます!