• 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

VPS Starter Arubacloud
0 głosów
144 wizyt
pytanie zadane 26 sierpnia 2021 w Java przez DziQu Początkujący (420 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

0 głosów
1 odpowiedź 142 wizyt
pytanie zadane 16 kwietnia 2023 w Java przez mm Użytkownik (890 p.)
0 głosów
1 odpowiedź 343 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...