私は春のThymeleafで新しく、Employee
のコンテンツリストCertificate
を新しく追加したいと思います。私はコントローラから渡されたCertificate
のリストをバインドするためにth:checkbox
を使用しました。マイコード:Thymeleafチェックボックスバインドリストオブジェクト
コントローラ
@RequestMapping(value = "/add" , method = RequestMethod.GET)
public String add(Model model) {
model.addAttribute("employee",new Employee());
model.addAttribute("certificates",certificateService.getList());
return "add";
}
@RequestMapping(value = "/add" , method = RequestMethod.POST)
public String addSave(@ModelAttribute("employee")Employee employee) {
System.out.println(employee);
return "list";
}
豆
従業員
@Entity
@Table(name = "employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private int id;
@Column(name = "Name")
private String name ;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name="emp_cert",
joinColumns={@JoinColumn(name="employee_id")},
inverseJoinColumns={@JoinColumn(name="certificate_id")})
private List<Certificate> certificates;
public Employee() {
if(certificates == null)
certificates = new ArrayList<>();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Certificate> getCertificates() {
return certificates;
}
public void setCertificates(List<Certificate> certificates) {
this.certificates = certificates;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + "certificates size = "+certificates.size()+" ]";
}
@Entity
@Table(name = "certificate")
public class Certificate {
証明書
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Id")
private int id;
@Column(name = "name")
private String name ;
@ManyToMany(mappedBy="certificates")
private List<Employee> employees ;
public Certificate() {
if(employees == null)
employees = new ArrayList<>();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Certificate other = (Certificate) obj;
if (id != other.id)
return false;
return true;
}
クライアントから送信されたリクエストが文法的に間違っていた -
HTMLフォーム
<form action="#" th:action="@{/employee/add}" th:object="${employee}" method="post">
<table>
<tr>
<td>Name</td>
<td><input type="text" th:field="*{name}"></td>
</tr>
<tr>
<td>Certificate</td>
<td>
<th:block th:each="certificate , stat : ${certificates}">
<input type="checkbox" th:field="*{certificates}" name="certificates" th:value="${certificate.id]}"/>
<label th:text="${certificate.name}" ></label>
</th:block>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Add"/></td>
</tr>
</table>
</form>
は、問題は私が
400を得たフォームを送信しようとしているときに、あります。
うまくいけば、誰かがこれを解決する方法を提案してくれることを望みます。
こんにちは、あなたはそれを解決するために管理するのですか?私は同様の問題で立ち往生しています。 – agilob
こんにちは、私は以下の解決策でそれを追加します –