Themeleaf проблема с не может быть пустой переменной - PullRequest
0 голосов
/ 20 сентября 2019

Я пытался отправить сообщения в БД.Однако, когда я попытался использовать themeleaf, он показывает мне следующую ошибку:

EL1007E: Свойство или поле 'name' не может быть найдено в null Исключение, оценивающее выражение SpringEL: "name" (template: "StudentForm" -строка 264, столбец 49) Произошла ошибка при разборе шаблона (шаблон: «ресурс пути к классу [templates / StudentForm.html]»)

Это то, что я попробовал ниже:

StudentForm.html

<div class="col-lg-10">
    <div class="card">
        <div class="card-header">
            <strong>Basic Form</strong> Elements
        </div>
        <div class="card-body card-block">
            <form th:action="@{/StudentForm}" th:Object="${student}" method="post" enctype="multipart/form-data" class="form-horizontal" role="form">

                <div class="row form-group">
                    <div class="col col-md-3">
                        <label for="text-input" th:field="*{name}"  class=" form-control-label">Ismi sharifi</label>
                    </div>
                    <div class="col-12 col-md-9">
                        <input type="text" id="text-input"    placeholder="Iltimos ismni kiriting" class="form-control">

                    </div>
                </div>
                <div class="row form-group">
                    <div class="col col-md-3">
                        <label for="select" class=" form-control-label">Fakulteti</label>
                    </div>
<!--                     <div class="col-12 col-md-9">
                        <select name="select" id="select" class="form-control">
                            <option value="0">Fakultetni tanlang</option>
                            <option value="1">Option #1</option>
                            <option value="2">Option #2</option>
                            <option value="3">Option #3</option>
                        </select>
                    </div>
                </div> -->



                <div class="row form-group">
                    <div class="col col-md-3">
                        <label for="email-input" class=" form-control-label">Email Input</label>
                    </div>
                    <div class="col-12 col-md-9">
                        <input type="email" id="email-input" th:field="*{email}"  placeholder="Emailni kiriting" class="form-control">
                        <small class="help-block form-text"></small>
                    </div>
                </div>

                 <div class="row form-group">
                    <div class="col col-md-3">
                        <label for="text-input" class=" form-control-label">To'langan summa</label>
                    </div>
                    <div class="col-12 col-md-9">
                        <input type="text" id="text-input" placeholder="Summani kiriting" class="form-control">

                    </div>
                </div>


                <div class="row form-group">
                    <div class="col col-md-3">
                        <label for="file-input" class=" form-control-label">File input</label>
                    </div>
                    <div class="col-12 col-md-9">
                        <input type="file" id="file-input" name="file-input" class="form-control-file">
                    </div>
                </div>

            </form>
        </div>
        <div class="card-footer">
            <button type="submit" class="btn btn-primary btn-sm">
                <i class="fa fa-dot-circle-o"></i> Yuklash
            </button>
            <button type="reset" class="btn btn-danger btn-sm">
                <i class="fa fa-ban"></i> Reset
            </button>
        </div>
    </div>

StudentController.java

package io.javabrains;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import io.javabrains.Entities.Student;
import io.javabrains.repository.StudentRepository;
import io.javabrains.service.StudentService;

@Controller
public class StudentController {
     @Autowired
    private StudentRepository repository;
    @Autowired
    private StudentService service;

    @RequestMapping(value= {"/student"},method=RequestMethod.GET)
    public ModelAndView student(HttpServletRequest request) {
        request.setAttribute("Student", service.findAll());
        request.setAttribute("mode", "MODE_TASKS");
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("student");
                return modelAndView;
    }

    @RequestMapping(value="/StudentForm",method=RequestMethod.POST)
    public ModelAndView studentForm(@Valid Student student,BindingResult bindingResult,ModelMap modelMap)
    {
        ModelAndView modelAndView = new ModelAndView();

                                service.addStudent(student);                    
        modelAndView.addObject("student",new Student());
        modelAndView.setViewName("studentForm");
        return modelAndView;


    }



    @RequestMapping(value={"/StudentForm"},method=RequestMethod.GET)
    public ModelAndView studentForm() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("StudentForm");
        return modelAndView;
    }


    public List<Student>getAllEmployers(){
        return service.findAll();
    }

StudentEntity.java

package io.javabrains.Entities;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

@Entity
@Table(name = "student")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "studentId")
    private int studentId;
    @Column(name="name")
    @NotNull(message = "Name is compulsort")
    private String Name;
    @Column(name="email")
    @NotNull(message = "Email is compulsory")
    private String Email;

    @Column(name="department")
    @NotNull(message = "department is compulsort")
    private String Department;
    @Column(name="amount")
    @NotNull(message = "Amount is compulsort")
    private double Amount;

    @ManyToOne
    @JoinColumn(name="studentId",referencedColumnName="id",insertable=false, updatable=false)
    private DepartmentCategory departmentCategory;

1 Ответ

1 голос
/ 20 сентября 2019

Прежде всего, ваш контроллер должен содержать метод get, который возвращает объект Student в виде формы для привязки.Вы пропустили это.Это должно выглядеть примерно так:

@RequestMapping(value={"/StudentForm"},method=RequestMethod.GET)
public ModelAndView studentForm() {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("student", new Student()) //returns object to thymeleaf context
    modelAndView.setViewName("StudentForm");
    return modelAndView;
}

, тогда вы должны изменить соглашение об именах в классе ученика, поля должны начинаться со строчной буквы.Вы должны заметить, что у вас есть поле Имя в вашем классе ученика, но вы хотите отобразить th: field = "* { name }" в представлении тимелист.

Читатькое-что о DTO и Моделях, потому что вы не должны использовать свои объекты непосредственно на уровне контроллера

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