Ich bin neu in Thymeleaf mit Frühling, ich möchte neue die Inhaltsliste von Certificate
hinzufügen. Ich habe th:checkbox
verwendet, um die Liste Certificate
zu binden, die vom Controller übergeben wurde. Meine Codes:Thymoleaf Checkbox binden Liste von Objekten
-Controller
@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";
}
Bohnen
Mitarbeiter
@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 {
Zertifikat
@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-Formular
<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>
Das Problem ist, wenn ich versuche, das Formular senden ich habe
400 - Die Anfrage vom Client gesendet syntaktisch nicht korrekt war.
Hoffentlich hat jemand einen Vorschlag, wie man das löst.
Hallo, haben Sie es geschafft, es zu lösen? Ich stecke mit ähnlichen Problemen fest. – agilob
Hallo, ich werde es in Lösung unter –