Java 用另一个表的数据填充thymeleaf下拉列表
我对春靴还不熟悉。在我的系统中有两个名为subject、course的模型(两个数据库名称相同,通过外键course_id连接)。我需要在addSubject表单的下拉列表中选择课程名称。有人能告诉我怎么做吗 Subject.DAO文件Java 用另一个表的数据填充thymeleaf下拉列表,java,hibernate,spring-boot,thymeleaf,Java,Hibernate,Spring Boot,Thymeleaf,我对春靴还不熟悉。在我的系统中有两个名为subject、course的模型(两个数据库名称相同,通过外键course_id连接)。我需要在addSubject表单的下拉列表中选择课程名称。有人能告诉我怎么做吗 Subject.DAO文件 @Service public class SubjectDAO { @Autowired SubjectRepository subjectRepository; //to save a subject public Sub
@Service
public class SubjectDAO {
@Autowired
SubjectRepository subjectRepository;
//to save a subject
public Subject save(Subject subject){
return subjectRepository.save(subject);
}
//to search all subjects
public List<Subject> findAll(){
return subjectRepository.findAll();
}
//get a subject by id
public Subject findById(Long id){
return subjectRepository.findById(id).orElse(null);
}
//delete a subject
public void delete(Long id){
subjectRepository.deleteById(id);
}
}
@服务
公共类主题{
@自动连线
主题库主题库;
//保存主题
公共主题保存(主题){
返回subjectRepository.save(主题);
}
//搜索所有主题
公共列表findAll(){
返回subjectRepository.findAll();
}
//通过id获取主题
公共主题findById(长id){
返回subjectRepository.findById(id).orElse(null);
}
//删除主题
公共无效删除(长id){
subjectRepository.deleteById(id);
}
}
Course.DAO文件
@Service
public class CourseDAO {
@Autowired
CourseRepository courseRepository;
//to save a course
public Course save(Course course){
return courseRepository.save(course);
}
//to search all courses
public List<Course> findAll(){
return courseRepository.findAll();
}
//get a course by id
public Course findById(Long id){
return courseRepository.findById(id).orElse(null);
}
//delete a course
public void delete(Long id){
courseRepository.deleteById(id);
}
}
@服务
公共课{
@自动连线
课程定位课程定位;
//保存课程
公共课程保存(课程){
返回课程存储。保存(课程);
}
//搜索所有课程
公共列表findAll(){
return courseRepository.findAll();
}
//凭身份证上一门课
公共课程findById(长id){
return courseRepository.findById(id).orElse(null);
}
//删除课程
公共无效删除(长id){
courseRepository.deleteById(id);
}
}
主题控制器
@Controller
public class SubjectController {
@Autowired
private SubjectDAO subjectDAO;
@RequestMapping("/subject")
public String viewHomePage(Model model){
List<Subject> subjectDetails= subjectDAO.findAll();
model.addAttribute("subjectDetails",subjectDetails);
return "subject";
}
@RequestMapping("/subject/new")
public String addSubject(Model model){
Subject subject =new Subject();
model.addAttribute("subject",subject);
return "addSubject";
}
@RequestMapping(value="/subject/save",method= RequestMethod.POST)
public String saveCourse(@ModelAttribute("subject") Subject subject){
subjectDAO.save(subject);
return "redirect:/subject";
}
@RequestMapping("/subject/edit/{id}")
public ModelAndView updateSubjcet(@PathVariable(name="id")Long id){
ModelAndView mav=new ModelAndView(("updateSubject"));
Subject subject=subjectDAO.findById(id);
mav.addObject("subject",subject);
return mav;
}
@RequestMapping("/subject/delete/{id}")
public String deleteProduct(@PathVariable(name="id") Long id){
subjectDAO.delete(id);
return "redirect:/subject";
}
}
@控制器
公共类主题控制器{
@自动连线
私人主体道主体道;
@请求映射(“/subject”)
公共字符串视图主页(模型){
List subjectDetails=subjectDAO.findAll();
model.addAttribute(“subjectDetails”,subjectDetails);
返回“主题”;
}
@请求映射(“/subject/new”)
公共字符串addSubject(模型){
主题=新主题();
model.addAttribute(“主题”,主题);
返回“addSubject”;
}
@RequestMapping(value=“/subject/save”,method=RequestMethod.POST)
公共字符串存储过程(@modeldattribute(“subject”)subject-subject){
subjectDAO.save(subject);
返回“重定向:/subject”;
}
@请求映射(“/subject/edit/{id}”)
公共模型和视图更新subjset(@PathVariable(name=“id”)长id){
ModelAndView mav=新的ModelAndView((“更新子对象”);
Subject-Subject=subjectDAO.findById(id);
mav.addObject(“subject”,subject);
返回mav;
}
@请求映射(“/subject/delete/{id}”)
公共字符串deleteProduct(@PathVariable(name=“id”)长id){
subjectDAO.delete(id);
返回“重定向:/subject”;
}
}
主题html文件
<!DOCTYPE html>
<html xmlns:th="https://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Adding a Subject</title>
</head>
<body>
<div align="center">
<h1>Add a new Subject</h1>
<br/>
<form action="#" th:action="@{/subject/save}" th:object="${subject}" method="post">
<table border="0" cell[adding="10">
<tr>
<td>Subject code:</td>
<td><input type="text" th:field="*{course_code}" /></td>
</tr>
<tr>
<td>Subject Name:</td>
<td><input type="text" th:field="*{name}" /></td>
</tr>
<tr>
<td>Course:</td>
<td>
<select>
<option value=""></option>
</select>
Z
</td>
</tr>
<tr>
<td colspan="2"><button type="submit">Save</button></td>
</tr>
</table>
</form>
</div>
</body>
</html>
添加主题
添加新主题
主题代码:
主题名称:
课程:
Z
拯救
首先将所有课程添加到模型地图中
model.addAttribute("cources",courseDao.findAll());
然后使用th:each
属性填充选择选项
<select th:field="*{course}">
<option value="">Choose..</option>
<option th:each="c: ${cources}" th:value="${c.id}" th:text="${c.name}" />
</select>
选择。。
所以您想在主题html中加载课程组合
您需要修改主题控制器
@RequestMapping("/subject")
public String viewHomePage(Model model){
List<Subject> subjectDetails= subjectDAO.findAll();
List<Course> courseDetail= courseDAO.findAll();
model.addAttribute("subjectDetails",subjectDetails);
model.addAttribute("courses",courseDetail);
return "subject";
}
@RequestMapping("/subject/new")
public String addSubject(Model model){
Subject subject =new Subject();
model.addAttribute("subject",subject);
List<Course> courseDetail= courseDAO.findAll();
model.addAttribute("courses",courseDetail);
return "addSubject";
}
编辑2:
根据你在Git中的代码,我可以看到
@Autowired
private SubjectDAO subjectDAO;
private CourseDAO courseDAO;
应该是
@Autowired
private SubjectDAO subjectDAO;
@Autowired
private CourseDAO courseDAO;
尝试此操作,但出现错误在模板解析过程中出错(模板:“类路径资源[templates/addSubject.html]”)org.thymeleaf.exceptions.TemplateInputException:在模板解析过程中出错(模板:“类路径资源[templates/addSubject.html]”),我认为您添加的html是addSubject。。我已经添加了mroe详细信息,请多次尝试使用thx,但它仍然不起作用。这一次出现了NullPointException,出现了意外错误(type=Internal Server error,status=500)。com.project.attention.controller.SubjectController.addSubject(SubjectController.java:37)37-List courseDetail=courseDAO.findAll()上没有可用的java.lang.NullPointerException消息;yh我认为它是空的,现在NullPointException消失了,但再次显示以前的错误“模板解析期间发生错误(模板:“类路径资源[templates/addSubject.html]”)org.thymeleaf.exceptions.TemplateInputException:模板解析期间发生错误(模板:“类路径资源[templates/addSubject.html]”)html和控制器中的属性应该相同。model.addAttribute(“课程”,courseDetail);我想你已经在控制器代码中添加了“课程”,也在html中添加了modelMap。你是指subjectController吗?不是,我是指模型这是项目的github repo
@Autowired
private SubjectDAO subjectDAO;
@Autowired
private CourseDAO courseDAO;