2017-03-06 6 views
0

フィールド(firstName、lastName、mobile、およびemail)を持つStudentクラスといくつかのフィールドを持つGuardianクラス同じ名前(ファーストネーム、ラストネーム、電子メール)を持っています。ThymeleafとSpring MVCを使用して類似の属性名を持つ2つの異なるモデルに属するオブジェクトを1つのフォームに追加

追加学生ビューで、ユーザーは学生の詳細を入力することになって、その保護者のように学生のためのものです:

...  
<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

を私は次の取得します学生用テーブルとガーディアンテーブル用にデータベースに記録する: 学生FN、ガーディアンFN

Thymeleafに両者を区別させる方法はありますか?明らかにモデルを変更することは別として。

答えて

0

私はthymeleafのデータを適切に参照していない可能性があると考えています。 th:field=*{}を使用しているときに、th:object=${}を定義するdivの外でそれを実行しているように見えます。同じdiv内でこれを実行してください。私が試みるもう一つのことは、この方法でフィールドを直接参照することです。表記:th:field=${student.firstName}

+0

オブジェクトとフィールドを直接参照すると、 'th:field = $ {student.firstName}'はそのような状況で最も安全で読みやすくなります。 –

関連する問題