Spring MVC: сохранение значений, добавленных в форму для последующей загрузки - PullRequest
1 голос
/ 10 марта 2019

У меня есть ParticipController.java, который может добавлять / удалять / редактировать имена участников.

import java.util.ArrayList;
import java.util.List;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import questForTheBest.domain.Participants;

@Controller
public class ParticipantsController {

@InitBinder("participant") // Validator for participant model
protected void initBinder(WebDataBinder binder) {
        binder.addValidators(new ParticipantsValidator());
}

List<Participants> participantList = new ArrayList<>(); // create a list of participants

@RequestMapping("/participants") // Participants page
public String testing(Model model) {
    model.addAttribute("participantList", participantList);
    return "forms/ParticipantMaster";
}

@RequestMapping(value = "/participantDetail", method = RequestMethod.GET) // Shows participants
public String participantDetail(@ModelAttribute("participant") Participants participant, @RequestParam(value="participantId", required=false, defaultValue="-1") int participantId) {

    if (participantId >= 1) { // Shows participants with an id greater than or equal to 1

        Participants p2 = participantList.stream().filter(p -> (p.getId() == participantId)).findAny().get(); // gets participants
        participant.setId(p2.getId()); // sets participants id
        participant.setName(p2.getName()); // sets participants name
    } else {

        participant.setId(Participants.lastId); // otherwise create a new participant id
        Participants.lastId++; // increment last id
    }
    return "forms/ParticipantDetail";
}   

@RequestMapping(value = "/addParticipant", method = RequestMethod.POST) // Adding participants page
public String addParticipant(@Valid @ModelAttribute("participant") Participants participant,BindingResult result, Model model) {


    if (result.hasErrors()) { // validation
        return "forms/ParticipantDetail";
    }
    else {


    participantList.removeIf(p -> (p.getId() == participant.getId()));
    participantList.add(participant); // add participants


    model.addAttribute("participantList", participantList);
    return "forms/ParticipantMaster";
    }
}   

@RequestMapping(value = "/deleteParticipant", method = RequestMethod.GET) // Deleting participants
public String deleteParticipant(@RequestParam(value="participantId", required=false, defaultValue="-1") int participantId, Model model) {

    participantList.removeIf(p -> (p.getId() == participantId)); // removes the participant with id
    model.addAttribute("participantList", participantList);
    return "forms/ParticipantMaster";
}



}

Я хочу иметь возможность: каждый раз, когда список имен вводится в форму, которую я хотел бы, чтобы онисохраняться при нажатии кнопки «Сохранить текущие имена», чтобы впоследствии их можно было снова загрузить на другую страницу, выбрав из выпадающего списка, а затем нажмите кнопку «Загрузить».

Общее приложение - это таблица лидеров, поэтому я хотел бы, чтобы одни и те же участники могли быть сохранены, например, так, чтобы их можно было загружать, когда определенный класс в школе должен будет использовать таблицу лидеров.

Требует ли это использованиябазы данных или это возможно без.

Спасибо.

1 Ответ

0 голосов
/ 10 марта 2019

Конечно, вам понадобится база данных для постоянного хранения данных таблицы лидеров на твердотельном устройстве (хранилище SSD), учитывая ваш вариант использования, поскольку память (RAM) сбрасывается / сбрасывается при перезагрузке компьютера или сбоях.Вы можете иметь слой в памяти или распределенный кеш в качестве слоя над слоем базы данных, используя структуру данных в памяти, как вы использовали список в своей реализации или redis соответственно, чтобы сделать ваше приложение эффективным для обслуживания операций чтения.

В вашем приложении должен быть слой объекта доступа к базе данных (DAO) для выполнения операций, связанных с базой данных.

Пожалуйста, перейдите по этой ссылке, чтобы понять, как слой DAO реализован при весенней загрузке

https://www.baeldung.com/jsf-spring-boot-controller-service-dao

Надеюсь, это поможет!

...