【问题标题】:populating thymeleaf dropdown with data of another table用另一个表的数据填充 thymeleaf 下拉列表
【发布时间】:2020-01-11 21:26:13
【问题描述】:

我是 spring-boot 的新手。在我的系统中,有两个模型名为 subject,course(两个具有相同名称并通过外键 course_id 连接的数据库)。我需要在 addSubject thymeleaf 表单的下拉列表中选择课程名称。有人可以告诉我如何做到这一点

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);
    }


}

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);
    }


}

主题控制者

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

主题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>

【问题讨论】:

标签: java hibernate spring-boot thymeleaf


【解决方案1】:

所以你想在主题 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";
} 

在 HTML 中

<tr>
    <td>Course:</td>
    <td>
        <select th:field="*{course_code}">
          <option value="">Choose..</option>
          <option th:each="course: ${courses}" th:value="${course.id}" th:text="${course.name}" />
        </select>
    </td>
</tr>
<tr>

编辑 1:

我认为你正在加载addSubject.html

在这种情况下你需要修改 addSubject 控制器

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

【讨论】:

  • 试过这个但是出错模板解析期间发生错误(模板:“类路径资源[模板/addSubject.html]”)org.thymeleaf.exceptions.TemplateInputException:模板解析期间发生错误(模板:“类路径资源 [templates/addSubject.html]”)
  • 我认为您添加的 HTMl 是 addSubject .. 我添加了 mroe 详细信息请尝试
  • 非常感谢,但仍然无法正常工作。这次出现 NullPointException 出现意外错误(类型=内部服务器错误,状态=500)。 com.project.attendance.controller.SubjectController.addSubject(SubjectController.java:37) 处没有可用消息 java.lang.NullPointerException 37- List courseDetail= courseDAO.findAll();
  • yh 我认为它是空的,现在 NullPointException 消失了,但再次显示以前的错误'模板解析期间发生错误(模板:“类路径资源 [templates/addSubject.html]”)org.thymeleaf。 exceptions.TemplateInputException:模板解析时出错(模板:“类路径资源[templates/addSubject.html]”)
  • html 和控制器中的属性应该相同。 model.addAttribute("课程",courseDetail);我认为您也在 html 的控制器代码中添加了“课程”
【解决方案2】:

首先将所有课程添加到ModelMap中

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>

【讨论】:

  • modelMap 你是指subjectController吗?
  • 不是我的意思是模型
猜你喜欢
  • 2017-06-13
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
相关资源
最近更新 更多