フィールド(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
保護者のためのそして、この: まず名前:私は学生のために、この入力した場合 :たとえばガーディアンFN
を私は次の取得します学生用テーブルとガーディアンテーブル用にデータベースに記録する: 学生FN、ガーディアンFN
Thymeleafに両者を区別させる方法はありますか?明らかにモデルを変更することは別として。
オブジェクトとフィールドを直接参照すると、 'th:field = $ {student.firstName}'はそのような状況で最も安全で読みやすくなります。 –