我有一个thymleaf bootstrap前端,我希望能够更新并添加新员工,但员工与部门有关系并且只有部门ID但我需要通过选项显示部门名称,我是试图将其转换为thymleaf代码
<div class="card-body">
<form>
<div class="form-group">
<label class="form-control-label"
for="field_department">Department</label>
<select class="form-control" id="field_department">
<option value="0">CEO</option>
<option value="1">Accounting</option>
<option value="2">Java</option>
<option value="3">Testing</option>
<option value="4">People management</option>
</select>
</div>
<div class="form-group">
<label class="form-control-label"
for="field_employeeName">Employee Name</label>
<input class="form-control"
id="field_employeeName"
type="text"
value="Ivan Ivanov"/>
</div>
</form>
当我选择部门时,如何将每个选项从后端连接到部门的ID。
答案 0 :(得分:0)
首先,您应该定义Employee和Department模型之间的关系。以下是JPA中的示例。
部门模型
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/**
* Department Table
*/
@Entity
@Table(name = "department")
public class Department {
/**
*
* Department Number
*/
@Id
@Column(name = "number")
private int number ;
/**
*
* Department name
*/
@Column(name = "name")
private String name ;
/**
*
* Department employees
*/
@OneToMany(mappedBy = "department")
private Set<Employee> employees ;
public Department() {
if(employees == null) {
employees = new HashSet<>() ;
}
}
/**
* Number Getter
* @return Department Number
*/
public int getNumber() {
return this.number;
}
/**
* Number Setter
* @param number Department Number
*
*/
public void setNumber(int number) {
this.number = number;
}
/**
* Name Getter
* @return Department Name
*/
public String getName() {
return name;
}
/**
* Name Setter
* @param name Department name
*
*/
public void setName(String name) {
this.name = name;
}
/**
* Department To String
* @return Department in String
*/
@Override
public String toString() {
return "Department [number=" + number + ", name=" + name + "]";
}
}
员工模型
import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;
@Entity
@Table(name = "employee")
public class Employee {
/**
* Employee ID
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private int id;
/**
* Employee name
*
*/
@Column(name = "Name")
private String name ;
/**
* Employee job position
*
*/
@Column(name = "Job")
private String job ;
/**
* Salary of employee
*
*/
@Column(name = "Salary")
private float salary ;
/**
* Employee Gender
*/
private char gender;
/**
* Employee department
*
*/
@ManyToOne
@JoinColumn(name = "Dno")
private Department department;
public Employee() {
}
/**
* <code>id</code> getter
* @return Employer id
*
*/
public int getId() {
return id;
}
/**
* <code>id</code> setter
* @param id Employee id
*
*/
public void setId(int id) {
this.id = id;
}
/**
* <code>name</code> getter
* @return Employer name
*
*/
public String getName() {
return name;
}
/**
* <code>name</code> setter
* @param name Employee name
*
*/
public void setName(String name) {
this.name = name;
}
/**
* <code>job</code> getter
* @return Staff position
*
*/
public String getJob() {
return job;
}
/**
* <code>job</code> setter
* @param job Employee job
*
*/
public void setJob(String job) {
this.job = job;
}
/**
* <code>salary</code> getter
* @return Employer salary
*
*/
public float getSalary() {
return salary;
}
/**
* <code>salary</code> setter
* @param salary Employee salary
*
*/
public void setSalary(float salary) {
this.salary = salary;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
/**
*
* Employee Department Getter
* @return Return Employee Department
*/
public Department getDepartment() {
return department;
}
/**
* Employee Department Setter
* @param {@link Department} <a>Employee department></a>
*/
public void setDepartment(Department department) {
this.department = department;
}
/**
* Convert an employee to string
*
*/
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", job=" + job + ", salary=" + salary + ", gender=" + gender
+ "Department = "+department.getNumber() + "]";
}
}
在您用于添加Employee的控制器中,首先应该传递可用部门列表,以便从具有employee类初始化对象的数据库中进行查看。例如,当用户请求添加员工页面时执行此操作。
@RequestMapping(value = "/add" , method = RequestMethod.GET)
public String add(Model model) {
model.addAttribute("employee",new Employee());
model.addAttribute("departments",departmentService.getList());
return "add";
}
方法getList()
用于获取部门列表使用部门存储库
@Service("departmentService")
public class DepartmentService {
@Autowired
private DepartmentRepository departmentRepository ;
public List<Department> getList() {
return departmentRepository.findAll();
}
public DepartmentRepository getDepartmentRepository() {
return departmentRepository;
}
public void setDepartmentRepository(DepartmentRepository departmentRepository) {
this.departmentRepository = departmentRepository;
}
}
添加新员工的百万美元形式如下。
<form action="#" th:action="@{/employee/add}" th:object="${employee}" method="post">
<table>
<tr th:if="${#fields.hasAnyErrors()}">
<td th:each="error : ${#fields.allErrors()}" th:text="${error}"></td>
</tr>
<tr>
<td>Name</td>
<td>
<input type="text" th:field="*{name}" class ="inputeText" th:errorclass="errorIncput">
<span th:if="${#fields.hasErrors('name')}" th:errors="*{name}"></span>
</td>
</tr>
<tr>
<td>Job</td>
<td>
<input type="text" th:field="*{job}">
<span th:if="${#fields.hasErrors('job')}" th:errors="*{job}"></span>
</td>
</tr>
<tr>
<td>Gender</td>
<td>
<ul>
<li><input type="radio" th:field="*{gender}" value="M"/> Male</li>
<li><input type="radio" th:field="*{gender}" value="F"/> female</li>
</ul>
</td>
</tr>
<tr>
<td>Salary</td>
<td><input type="number" th:field="*{salary}"></td>
</tr>
<tr>
<td>Department</td>
<td>
<select th:field="*{department.number}">
<option
th:each="department : ${departments}"
th:text="${department.name}"
th:value="${department.number}" />
</select>
<span th:if="${#fields.hasErrors('department.number')}" th:errors="*{department.number}" ></span>
<span th:if="${#fields.hasErrors('department')}" th:errors="*{department}" ></span>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Add"/></td>
</tr>
</table>
</form>
一位用户点击添加即可在EmployeeController中提交您将拥有RequestMapping
的表单来处理此操作。
@RequestMapping(value = "/add" , method = RequestMethod.POST)
public String addSave(
@ModelAttribute("employee")Employee employee ,
BindingResult bindingResult , Model model) {
}
从视图收到的employee
对象已经与用户选择的部门相关联。