Java 用另一个表的数据填充thymeleaf下拉列表

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

我对春靴还不熟悉。在我的系统中有两个名为subject、course的模型(两个数据库名称相同,通过外键course_id连接)。我需要在addSubject表单的下拉列表中选择课程名称。有人能告诉我怎么做吗

Subject.DAO文件

@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;