我的自定义实体注册不起作用

时间:2018-05-27 21:34:27

标签: java spring spring-mvc

您好我注册了一个实体,我使用Spring.I使我的模型和一切但我得到一个错误,当我尝试注册我的网站中的事件。 这是错误的图像:here

这是我所有文件夹的图片 here

我首先遇到连接OneToMany和ManyToOne的问题,但我在这里搜索并修复它们。但是现在我在控制台中没有错误。仅在浏览器中。这是我在Event实体中的代码

    package com.example.app.entity;

import javax.persistence.*;
import java.util.List;

@Entity
@Table (name = "events")
public class Event {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

private String name;
@Column
@ElementCollection(targetClass=String.class)
private List<String> games;
@ManyToMany(fetch=FetchType.EAGER,cascade = {CascadeType.ALL})
@JoinTable(name = "event_users", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "event_id"))
private List<User> players;
private double latitude;
private double longitude;
private String description;
private String date;
private User owner;
private String gamesToParse;
private String usersToParse;


public String getGamesToParse() {
    return gamesToParse;
}

public void setGamesToParse(String gamesToParse) {
    this.gamesToParse = gamesToParse;
}

public String getUsersToParse() {
    return usersToParse;
}

public void setUsersToParse(String usersToParse) {
    this.usersToParse = usersToParse;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public User getOwner(){
    return owner;
}
public void setOwner(User owner){
    this.owner = owner;
}

public String getDescription(){
    return description;
}
public void setDescription(String description){
    this.description = description;
}

public double getLatitude(){
    return latitude;
}
public void setLatitude(double latitude){
    this.latitude = latitude;
}

public double getLongitude(){
    return longitude;
}
public void setLongitude( double longitude){
    this.longitude = longitude;
}

public String getName(){
    return name;
}
public void setName( String name){
    this.name = name;
}

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public List<String> getGames() {
    return games;
}

public void setGames(List<String> games) {
    this.games = games;
}

public void setGames(String gamesData) {
    String[] array = gamesData.split(",");
    for (String g:array) {
        this.games.add(g);
    }
}

public List<User> getPlayers() {
    return players;
}

public void setPlayers(List<User> players) {
    this.players = players;
}

}

这是我在RegistrationEvent Model中的代码

package com.example.app.model;

import com.example.app.entity.User;

import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;

public class RegistrationEvent {
@Size(min = 5, max = 100, message = "Event name too short")
private String name;
private List<String> games = new ArrayList<>();
private List<User> players = new ArrayList<>();
private double latitude;
private double longitude;
private String description;
private User owner;
private String date;
private String gamesToParse;
private String usersToParse;

public String getGamesToParse() {
    return gamesToParse;
}

public void setGamesToParse(String gamesToParse) {
    this.gamesToParse = gamesToParse;
}

public String getUsersToParse() {
    return usersToParse;
}

public void setUsersToParse(String usersToParse) {
    this.usersToParse = usersToParse;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public User getOwner() {
    return owner;
}

public void setOwner(User owner) {
    this.owner = owner;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public double getLongitude() {
    return longitude;
}

public void setLongitude(double longitude) {
    this.longitude = longitude;
}

public double getLatitude() {
    return latitude;
}

public void setLatitude(double latitude) {
    this.latitude = latitude;
}

public List<User> getPlayers() {
    return players;
}

public void setPlayers(List<User> players) {
    this.players = players;
}

public List<String> getGames() {
    return games;
}

public void setGames(String gamesData) {
    String[] array = gamesData.split(",");
    for (String g:array) {
        this.games.add(g);
    }
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

我认为错误是当我在我的html中传递参数失败时所以我也会显示我的HTML

    <body id="eventspeoplebody">
<ul>
    <li><a href="./BordFinder.html">Home</a></li>
    <li><a class="active" href="./Events&People.html">Events & People</a></li>
    <li><a href="./Trade.html">Trade</a></li>
    <li><a href="#chat">Chat</a></li>
    <li><a href="#account">Account</a></li>
    <li><a href="./About.html">About us</a></li>
    <li style="float:right"><a href="#signing">
        <img src="./user.png" width="30" height="30" style="vertical-align: middle"> Sign out</a></li>
</ul>

<br>
<p>
    <img class="logo" src="./logo.png" width="400" height="175">
    <span class="heading"> &nbsp Choose your game & find a team! </span>
</p>

<br>

<div align="center">
    <p class="heading1" >Choose where will be your event on the map or enter the coordinates below</p>
</div>

<br>

<br>
<form method="post" th:object="${event}">
<div class="transbox4">

    <p align="center" class ="specialText">
        <span class="blue"> INFO </span>
    </p>
    <div align="center">
        <div id="info" class ="specialText">
            <span class="blue"> Event name*: </span><br>
            <input type="text" class="input2" th:field="*{name}"><br>

            <span class="blue"> Games at the event*: </span><br>
            <input type="text" class="input2" th:field="*{gamesToParse}"><br>

            <span class="blue"> Date*: </span><br>
            <input type="text" class="input2" th:field="*{date}"><br>

            <span class="blue"> Player emails*: </span><br>
            <input type="text" class="input2" th:field="*{players}"><br>

            <span class="blue"> latitude*: </span><br>
            <input type="text" class="input2" th:field="*{latitude}"><br>

            <span class="blue"> longitude*: </span><br>
            <input type="text" class="input2" th:field="*{longitude}"><br>
            <p class="smallInfo" align="center">fields with * must be filled!</p>
        </div>

    </div>
</div>

<br>

<p align="center"> <button  type="submit" class="create button1"><b>Submit the Event</b></button> </p>
</form>

</body>
</html>

这里也是我的控制器

package com.example.app.Controllers;

import com.example.app.Service.EventService;
import com.example.app.model.RegistrationEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@Controller
public class EventsController {

@Autowired
private EventService eventService;

@GetMapping("/user/eventsAndPeople/registerEvent")
public String getRegisterPage(Model model, RegistrationEvent registrationEvent){
        model.addAttribute("event", registrationEvent);
        return "events/registerEvent";
}

@PostMapping("/user/eventsAndPeople/registerEvent")
public String registerEvent(@Valid @ModelAttribute RegistrationEvent registrationEvent){
    this.eventService.register(registrationEvent);
    return "events/registerEvent";
}

@RequestMapping(value = "/user/eventsAndPeople", method = RequestMethod.GET)
public String getEventsAndPeoplePage(){
    return "home/eventsAndPeople";
}
}

我将Xampp用于本地服务器和HeidiSQL,以便我可以跟踪我的数据库。 我很困惑什么是错的。哦,我忘记的是我的EventService实现:

import com.example.app.Repository.EventRepository;
import com.example.app.Repository.UserRepository;
import com.example.app.Service.EventService;
import com.example.app.entity.Event;
import com.example.app.model.RegistrationEvent;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

@Service
public class EventServiceImpl implements EventService {

@Autowired
private UserRepository userRepository;

@Autowired
private EventRepository eventRepository;

@Autowired
private ModelMapper modelMapper;

public EventServiceImpl() {
    super();
}

@Override
public void register(RegistrationEvent registrationEvent) {
    Authentication auth = 
SecurityContextHolder.getContext().getAuthentication();
    String name = auth.getName();

    Event event = this.modelMapper.map(registrationEvent, Event.class);
    event.setGames(registrationEvent.getGamesToParse());
    event.setDescription(registrationEvent.getDescription());
    event.setLatitude(registrationEvent.getLatitude());
    event.setLongitude(registrationEvent.getLongitude());
    event.setName(registrationEvent.getName());
    event.setPlayers(registrationEvent.getPlayers());
    event.setDate(registrationEvent.getDate());
    event.setOwner(this.userRepository.findOneByUsername(name));
    this.eventRepository.save(event);
}
}

1 个答案:

答案 0 :(得分:0)

尝试声明这样的方法:

public String getRegisterPage(RegistrationEvent registrationEvent, BindingResult bindingResult, Model model)
{
        model.addAttribute("event", registrationEvent);
        return "events/registerEvent";
}


public String registerEvent(@Valid @ModelAttribute RegistrationEvent registrationEvent, BindingResult bindingResult, Model model){
    this.eventService.register(registrationEvent);
    return "events/registerEvent";
}

编辑:

您正在返回&#34; events / registerEvent&#34;两种方法。这是对的吗?