【问题标题】:Spring MVC: Saving values added into a form to load laterSpring MVC:保存添加到表单中以稍后加载的值
【发布时间】:2019-03-10 19:07:59
【问题描述】:

我有一个 ParticipantsController.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";
}



}

我希望能够:每次在表单中输入姓名列表时,我希望在按下“保存当前姓名”按钮时保存它们,以便以后可以通过以下方式将它们再次加载到另一个页面上可以从下拉框中选择,然后单击“加载”按钮。

整个应用程序是一个排行榜,因此我希望能够保存相同的参与者,例如,当学校的某个班级需要使用排行榜时,可以加载它。

这需要使用数据库还是不需要。

谢谢。

【问题讨论】:

  • 目前我的参与者显示在一张桌子上,并且每次重新加载应用程序时都不会保留持久数据。

标签: spring spring-mvc spring-data


【解决方案1】:

当然,鉴于您的用例,您将需要数据库在固态设备(SSD 存储)上永久存储排行榜数据,因为内存(RAM)在机器重启或崩溃时被刷新/重置。您可以使用内存数据结构在数据库层之上使用内存层或分布式缓存作为层,就像您在实现或 redis 中分别使用列表一样,以使您的应用程序高效地提供读取服务。

您的应用程序中必须有一个数据库访问对象 (DAO) 层来执行与数据库相关的操作。

请参考此链接了解spring boot中DAO层是如何实现的

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

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多