在thymleaf和Bootstrap中有<options>的隐藏ID

时间:2018-03-18 09:29:30

标签: bootstrap-4 thymeleaf

我有一个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。

1 个答案:

答案 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对象已经与用户选择的部门相关联。