HTML-страница не отображается в приложении Springboot - PullRequest
1 голос
/ 31 октября 2019

Я пытаюсь создать страницу регистрации. Веб-сайт очень прост, домашняя страница будет возвращать страницу регистрации, и при нажатии «Отправить» она должна сохранить ее в базе данных. Но у меня проблемы с получением страницы.

Applicant.java

    import javax.persistence.*;
    import javax.validation.constraints.NotBlank;
    import java.util.Date;

    @Entity
    @Table(name = "bayilik_basvuru")
    public class Applicant {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int id;
        @NotBlank(message = "İsim Soyisim Girilmelidir.")
        @Column(name = "isim_soyisim")
        private String adSoyad;

        public Applicant() {

        }

        public String getAdSoyad() {
            return adSoyad;
        }

        public void setAdSoyad(String adSoyad) {
            this.adSoyad = adSoyad;
        }

    }

Контроллер

@Controller
public class HomeContoller {

    @Autowired
    private ApplicantDAO dao;

    @RequestMapping("/")
    public ModelAndView getApplicationPage(){
        ModelAndView model = new ModelAndView();
        Applicant applicant = new Applicant();
        model.addObject("applicant",applicant);
        model.setViewName("index");

        return model;
    }


    @PostMapping("/save")
    public String saveApplicant(@Valid Applicant applicant, BindingResult result){
        if (result.hasErrors()) {
            return "add-student";
        }

        dao.save(applicant);
        return "index";
    }
}

Index.html -> часть формы,

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Bayilik Ön Başvuru Formu</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">    <link rel="stylesheet" type="text/css" th:href="@{../css/style.css}" />
    <link rel="stylesheet" type="text/css" th:href="@{../css/bootstrap-datetimepicker.min.css}" />
    <link rel="stylesheet" type="text/css" th:href="@{../css/roboto-font.css}" />

    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</head>
<body>
<form class="form-horizantal" th:action="@{/save}" th:object="${applicant}"
                                  method="POST">
        <div class="form-group">
        <label class="col-md-4 control-label">İsim Soyisim</label>
        <div class="col-md-8">
           <input type="text" th:field="*{adSoyad}" class="form-control" /> <!-- it gives error at this line at the start of the th:field-->
           <span th:if="${#fields.hasErrors('adSoyad')}" th:errors="*{adSoyad}" class="text-danger"></span>
        </div>
</div>
</body>
</html>

Я занимался этим часами. Я сравнил его со многими примерами, и HTML-файл выглядит хорошо, контроллер выглядит хорошо. Я не знаю, что я делаю неправильно.

В моем файле pom у меня есть тимили;

<dependencies>
    ...
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    ...
<dependendcies>

Кстати ошибка такая;

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Thu Oct 31 01:40:47 EET 2019
There was an unexpected error (type=Internal Server Error, status=500).
Error during execution of processor 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' (template: "index" - line 27, col 56) // this line is the same line I showed on the index.html file

Ответы [ 3 ]

2 голосов
/ 31 октября 2019

Вы не используете аннотацию @ModelAttribute в своей конечной точке / save. попробуйте использовать его следующим образом:

@PostMapping("/save")
public String saveApplicant( @Valid @ModelAttribute("applicant") Applicant applicant, BindingResult result){
    if (result.hasErrors()) {
        return "add-student";
    }

    dao.save(applicant);
    return "index";
}

В вашем шаблоне тимелина выражение th:object="${applicant}" объявляет объект модели, который будет использоваться для сбора данных формы. Итак, в вашем контроллере вы должны использовать аннотацию @ModelAttribute, чтобы связать объект Заявитель с содержимым входящей формы.

1 голос
/ 01 ноября 2019

Измените свой метод get, чтобы правильно добавить объект:

@GetMapping("/") //simpler, more informative
public String getApplicationPage(Model model){
   model.addAttribute("applicant", new Applicant());  //note method name
   return "index";
}

Посмотрите на Project Lombok, чтобы значительно упростить ваши бины. Вам не хватает метода получения и установки для вашего свойства id, а аннотации @Getter и @Setter в классе могут привести к удалению большого количества шаблонов.

Вы также хотели бы, чтобы аннотация @ModelAttribute былаВаш метод отправки для параметра Applicant.

В будущем также, пожалуйста, опубликуйте свою полную трассировку стека.

0 голосов
/ 01 ноября 2019

Кажется, что в проекте была проблема с иерархией. Код сработал после того, как я исправил иерархию файлов.

Спасибо ответчикам за их попытку помочь, но они не смогли понять суть проблемы, так как я не прикрепил скриншот иерархии к вопросу.

...