2017-03-06 41 views
0

我有一個包含字段(firstName,lastName,mobile和email等)的Student類和一個帶有一些字段的Guardian類擁有相同的名字(名字,姓氏和電子郵件等)。使用Thymeleaf和Spring MVC添加屬於具有相似屬性名稱的兩個不同模型的兩個對象使用Thymeleaf和Spring MVC

在添加學生視圖中,用戶應該進入學生的細節和他們的監護人作爲這樣的學生:

...  
<div class="col s6"> 

         <div th:object="${student}" class="form-details row">Enter team member information 
         </div> 

         <div hidden="false"> 
          <label>Project</label> 
          <input th:field="*{project}" th:value="${project}"/> 
         </div> 

         <label>First Name</label> 
         <input type="text" th:field="*{firstName}"/><br/><br/> 

         <label>Last Name</label> 
         <input type="text" th:field="*{lastName}"/><br/><br/> 

         <label>Email Address</label> 
         <input type="text" name="email" th:field="*{email}"/><br/><br/> 

         <label>Mobile Number</label> 
         <input type="text" name="mobile" th:field="*{mobile}"/><br/><br/> 
... 

和監護人:

<div th:object="${guardian}" class="form-details">Enter guardian's information 
          </div> 

          <label>First Name</label> 
          <input type="text" th:field="*{firstName}"/><br/><br/> 

          <label>Last Name</label> 
          <input type="text" th:field="*{lastName}"/><br/><br/> 

          <label>Mobile Number</label> 
          <input type="text" name="mobile" th:field="*{mobile}"/><br/><br/> 

該控制器將兩個對象正確添加到視圖中:

@RequestMapping(value = "/add", method = RequestMethod.GET) 
    public ModelAndView addStudent(@RequestParam(value = "projectId") Integer projectId, 
            HttpServletRequest request) { 


     String lang = (String) request.getSession().getAttribute("lang"); 
     ModelAndView modelAndView = new ModelAndView(); 
     if(lang.equals("en")) { 
      modelAndView.setViewName("student-form"); 
     } 
     else { 
      modelAndView.setViewName("arabic/student-form-ar"); 
     } 

     Student student = new Student(); 
     student.setProject(projectService.findOneById(projectId)); 

     modelAndView.addObject("student", student); 
     modelAndView.addObject("guardian", new Guardian()); 
     modelAndView.addObject("project", projectService.findOneById(projectId)); 

     return modelAndView; 
    } 

然後保存兩個對象ts:

@RequestMapping(value = "/save", method = RequestMethod.POST, params = {"next"}) 
    public ModelAndView saveStudent(Student student, Guardian guardian, 
            Project project) { 

     // first student 
     if(studentService.findAllByProject(project).isEmpty()) // the first student 
      student.setLeader(true); 

     else // not the first student 
      student.setLeader(false); 

     guardianService.save(guardian); 
     student.setGuardian(guardian); 

     studentService.save(student); 

     ModelAndView modelAndView = new ModelAndView("redirect:/supervisor/add?projectId="+project.getId().toString()); 

     return modelAndView; 

    } 

對於每個對象,這些值將被連接並添加;例如: 如果我進入這個學生: 名字:學生FN

Student First Name Image

而本作監護人: 名:守護FN

Guardian First Name Image

我得到以下記錄在學生和監護人表中的數據庫中: Student FN,Guardian FN

有沒有什麼方法可以讓百里香在兩者之間進行區分?除了明顯改變模型。

回答

0

我相信你可能沒有正確引用百里香的數據。看起來像當您使用th:field=*{}時,您在定義th:object=${}的div之外進行此操作。嘗試在同一個div內做到這一點。我想嘗試的另一件事是以這種方式直接使用。符號:th:field=${student.firstName}

+0

發現在這種情況下直接引用對象和字段'th:field = $ {student.firstName}'最安全並且更具可讀性。 –

相關問題