Невозможно установить инструктор car_id в классе инструкторов - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть пара сущностей, я могу сохранить Инструктора с его идентификатором, именем, фамилией, городом, адресом, но я могу установить его ссылку на car_id с помощью формы тимилиста. На загрузчике все нормально

Произошла ошибка при разборе шаблона (template: "ресурс пути к классу [templates / index.html]") org.thymeleaf.exceptions.TemplateInputException: Произошла ошибка при разборе шаблона (template: "ресурс пути к классу [templates / index.html]") Вызвано: org.attoparser.ParseException: исключение при оценке выражения SpringEL:" car.getInstructor (). Id "(template:" index "- строка 84, столбец 13)

В классе инструктора я сделал это
@OneToOne (cascade = CascadeType.ALL, fetch = FetchType.LAZY) частный автомобиль;В классе Car я сделал это @OneToOne частный инструктор;

<body>
    <form th:object="${instructor}" th:action="@{/instructor/}" method="post">
        <input type="hidden" th:field="*{id}"/>
        First name<br>
        <input type="text" class="form-control" th:field="*{firstName}"/><br>
        Last name <br>
        <input type="text" class="form-control" th:field="*{lastName}"/><br>
        City <br>
        <input type="text" class="form-control" th:field="*{city}"/><br>
        Address <br>
        <input type="text" class="form-control" th:field="*{address}"/><br>

      <input type="number" class="form-control" th:field="*{car.id}"/><br>
        <button type="submit">Submit</button>
    </form>
</body> 

@ Slf4j @Controller открытый класс IndexController {

    private final InstructorService instructorService;
    private final StudentService studentService;
    private final CarService carService;
    private final CarDrivingClassService carDrivingClassService;

    public IndexController(InstructorService instructorService, StudentService studentService, CarService carService, CarDrivingClassService carDrivingClassService) {
        this.instructorService = instructorService;
        this.studentService = studentService;
        this.carService = carService;
        this.carDrivingClassService = carDrivingClassService;
    }


    @RequestMapping({"", "/", "/index"})
    public String getIndexPage(Model model) {

        System.out.println("Getting Index page");
        model.addAttribute("cars",carService.findAll());
        model.addAttribute("instructors", instructorService.findAll());
        model.addAttribute("students", studentService.findAll());

        return "index";
    }

    @GetMapping("/new")
    public String newRecipe(Model model){
        model.addAttribute("instructor", new InstructorCommand());

        return "/form";
}
    @PostMapping("instructor")
    @Transactional
    public String saveOrUpdate(@ModelAttribute InstructorCommand command){

        InstructorCommand savedCommand = instructorService.saveInstructorCommand(command);

        return "redirect:/";
    }


}

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name="cars")
public class Car extends BaseEntity{

    @Column(name = "name")
    private String name;

    @OneToOne
    private Instructor instructor;


}

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name="instructors")
public class Instructor extends Person{

    @OneToMany(mappedBy = "instructor")
    public  Set<Student> students = new HashSet<>();

    @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
    private Car car;


} 

1 Ответ

0 голосов
/ 22 сентября 2019

Я загружаю данные с этим

@Component
public class Bootstrap implements CommandLineRunner {

    private final CarService carService;
    private final StudentService studentService;
    private final InstructorService instructorService;
    private final CarDrivingClassService carDrivingClassService;

    public Bootstrap(CarService carService, StudentService studentService, InstructorService instructorService, CarDrivingClassService carDrivingClassService) {
        this.carService = carService;
        this.studentService = studentService;
        this.instructorService = instructorService;
        this.carDrivingClassService = carDrivingClassService;
    }

    @Override
    public void run(String... args) throws Exception {

        Date date = new SimpleDateFormat( "yyyyMMdd" ).parse( "19970807" );
        Date date2 = new SimpleDateFormat( "yyyyMMdd" ).parse( "20192304" );
        Date date3 = new SimpleDateFormat( "yyyyMMdd" ).parse( "20192404" );
        Date date4 = new SimpleDateFormat( "yyyyMMdd" ).parse( "20192505" );

        /*Creating a student*/
        Student student = new Student();
        student.setFirstName("Bob");
        student.setLastName("Rock");
        student.setBirthDate(date);
        student.setCity("Miami");
        student.setAddress("Lincoln Road");
        student.setPostalCode(45300);

        Student student2 = new Student();
        student2.setFirstName("John");
        student2.setLastName("Smith");
        student2.setBirthDate(date);
        student2.setCity("Miami");
        student2.setAddress("Old Cutler Road and Ingraham Highway");
        student2.setPostalCode(45100);

        /*Class that will save our classes for driving*/
        CarDrivingClass savedDrivingClasses;

        //Create 20 car driving classes and save them in table CLASSES
        for(int i = 0; i<20; i++){
            CarDrivingClass tempClass = new CarDrivingClass();
            tempClass.setDate(date3);
            savedDrivingClasses = carDrivingClassService.save(tempClass);
            /*
            Fill table STUDENT_CLASSES
            * */
            student.getClasses().add(savedDrivingClasses);
            student2.getClasses().add(savedDrivingClasses);
            System.out.println("Saving "+(i+1)+ ". class");
        }
        /*Instructor one*/
        Instructor instructor = new Instructor();
        instructor.setFirstName("Dave");
        instructor.setLastName("Joe");
        instructor.setCity("Miami");
        instructor.setAddress("Miami 001");
        instructor.setPostalCode(45400);

        /*Instructor two*/
        Instructor instructor2 = new Instructor();
        instructor2.setFirstName("Clark");
        instructor2.setLastName("Kent");
        instructor2.setCity("LA");
        instructor2.setAddress("South Martel Avenue");
        instructor2.setPostalCode(95400);

        /*Car num one*/
        Car audi = new Car();
        audi.setName("Audi A7");
        audi.setInstructor(instructor);

        /*Car num two*/
        Car BMW = new Car();
        BMW.setName("BMW M4");
        BMW.setInstructor(instructor2);

        /*Adding car to instructors*/
        instructor.setCar(audi);
        instructor2.setCar(BMW);

        /*Associate student with instructor*/
        student.setInstructor(instructor);
        student2.setInstructor(instructor);

        //Saving into db with services
        instructorService.save(instructor);
        instructorService.save(instructor2);
        studentService.save(student);
        studentService.save(student2);
        carService.save(audi);
        carService.save(BMW);

    }
} 

Данные отображаются нормально с этим

<h1>Instructors</h1>
<table>
    <thead>
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Surname</th>
        <th>City</th>
        <th>Address</th>
        <th>Car</th>
    </tr>
    </thead>
    <tr th:remove="all">
        <td>123</td>
        <td>Tasty Goodnees 1</td>
        <td><a href="#">View</a></td>
    </tr>
    <tr th:each="instructor : ${instructors}">
        <td th:text="${instructor.id}">334</td>
        <td th:text="${instructor.firstName}">Tasty Goodnees 3</td>
        <td th:text="${instructor.lastName}">Tasty Goodnees 3</td>
        <td th:text="${instructor.city}">Tasty Goodnees 3</td>
        <td th:text="${instructor.address}">Tasty Goodnees 3</td>
        <td th:text="${instructor.getCar().id}">Tasty Goodnees 3</td> <!--getting car id -->
    </tr>
</table> 

Но когда я добавляю нового Инструктора, он показывает мне ошибку для этого $ {преподавателя.getCar (). id в индексной форме, я могу добавить инструктора без поля ввода для id в форме и этой строки кода в index.html Tasty Goodnees 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...