• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Spring Boot - pobranie id użytkownika

0 głosów
33 wizyt
pytanie zadane 26 sierpnia w Java przez SaQie Nowicjusz (180 p.)

Hej, mam pewien problem

Tworzę sobie popularną apke na taski w celu nauki, stworzyłem już rejestracje oraz logowanie z użyciem Spring Security, teraz po zalogowaniu chciałem aby użytkownik mógł sobie dodawać zadania, i problem polega na tym że tabela tasków wymaga id użytkownika który tego taska dodaje, lecz nie mam zielonego pojęcia skąd go pobrać, klasy wyglądają tak:

 

Klasa User:

package pl.saqie.FirstWebProject.domain.user;

import com.sun.istack.NotNull;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import pl.saqie.FirstWebProject.domain.task.Task;

import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;

@Entity
@Table(name = "user")
@Getter
@Setter
@NoArgsConstructor
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String username;
    private String password;
    private String email;
    private String role;
    private boolean locked = false;
    private boolean enabled = true;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
    private Set<Task> tasks;

    public User(String username, String password, String email, String role) {
        this.username = username;
        this.password = password;
        this.email = email;
        this.role = role;
    }

    public List<String> getRoles(){
        if (this.role.length() > 0){
            return Arrays.asList(this.role.split(","));
        }
        return new ArrayList<>();
    }
}

 

 

Klasa Task:

 

package pl.saqie.FirstWebProject.domain.task;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import pl.saqie.FirstWebProject.domain.user.User;

import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
@Table(name = "task")
@Getter
@Setter
@NoArgsConstructor
public class Task {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private String description;
    private LocalDateTime createdDate;
    private boolean done;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id", nullable = false)
    @OnDelete(action = OnDeleteAction.CASCADE)
    private User user;

    public Task(String name, String description) {
        this.name = name;
        this.description = description;
        this.createdDate = LocalDateTime.now();
        this.done = false;
    }
}

 

No i mam kontroler który przenosi mnie na stronę do tworzenia tasków (Po zalogowaniu oczywiście) 

package pl.saqie.FirstWebProject.controllers.task;

import lombok.AllArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import pl.saqie.FirstWebProject.domain.task.dto.TaskDto;
import pl.saqie.FirstWebProject.domain.task.service.TaskService;
import pl.saqie.FirstWebProject.domain.user.service.UserService;

import javax.validation.Valid;

@Controller
@AllArgsConstructor
@RequestMapping("/task")
public class TaskController {

    private final TaskService taskService;


    @GetMapping("/create")
    public String getTaskCreateForm(Model model){
        model.addAttribute(new TaskDto());
        return "/view/task/create";
    }

    @PostMapping("/create")
    public String createNewTask(@ModelAttribute @Valid TaskDto taskDto, BindingResult bindingResult){
        if (bindingResult.hasErrors()){
            return "/view/task/create";
        }else {
            taskService.createNewTask(taskDto);
            return "redirect:/";
        }
    }

}

 

 

I tutaj pojawia się problem, używam thymeleaf i formularz wygląda tak:

 

<!DOCTYPE html>
<html xmlns:th="https://www.thymeleaf.org" lang="pl"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
<head th:replace="fragments :: head"></head>
<body>
<div class="container">
    <nav th:replace="fragments :: navigation"></nav>
</div>
<div class="container">
    <div class="row justify-content-center" style="margin-top: 60px">
        <h2 class="text-center text-warning">Dodawanie nowego taska</h2>
    </div>

    <div class="row justify-content-center" style="margin-top: 15px">
        <div class="col-md-6">
            <form th:action="@{/task/create}" th:method="post" th:object="${taskDto}">
                <div class="align-content-center">
                    <input th:field="*{name}" class="form-control" type="text" placeholder="Nazwa"
                           aria-label="default input example">
                    <br>
                    <p th:errors="${taskDto.name}"></p>
                    <input th:field="*{description}" class="form-control" type="password" placeholder="Opis"
                           aria-label="default input example">
                    <p th:errors="${taskDto.description}"></p>
                    <br>
                </div>
                <div class="row justify-content-center">
                    <button type="submit" class="btn btn-warning">Dodaj nowego taska</button>
                </div>
            </form>
        </div>
    </div>
</div>
</body>
</html>

 

jednakże po kliknięciu w buttona otrzymuje błąd który w sumie wiem z czego wynika bo sam ustaliłem że kolumna user_id nie może być nullem ale nie wiem skąd go pobrać w tym formularzu:

"Column 'user_id' cannot be null"

wygląd tabeli:

Z góry dziękuję za każdą pomoc.

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 93 wizyt
pytanie zadane 11 listopada 2020 w Java przez siemasiema123.96 Początkujący (350 p.)
0 głosów
2 odpowiedzi 219 wizyt
pytanie zadane 15 stycznia 2017 w Java przez Ola Kalisz Początkujący (320 p.)
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

85,082 zapytań

133,883 odpowiedzi

296,819 komentarzy

56,216 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...