簡體   English   中英

從表單發送數據的Java Spring問題

[英]Java Spring problem with send data from the form

對於“問題”類,我想添加一個“Priorytet”類字段。 “問題”有自己的字段:id、title(tytul)、description(opis) 等,還有一個與“Priorytet”類相關的字段,即:id、name(nazwa)、time(maksymalnyCzas)。 有什么問題? 當我提交表單時,“問題”類中的“priorytet”字段變為空白(它只包含“優先級”類項的 ID)。

優先級

public class Priorytet {
    private long id;
    private String nazwa;
    private long maksymalnyCzas;

    public Priorytet(long id, String nazwa, long maksymalnyCzas) {
        this.id = id;
        this.nazwa = nazwa;
        this.maksymalnyCzas = maksymalnyCzas;
    }

    public Priorytet() {

    }

    public long getId() {
        return id;
    }

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

    public String getNazwa() {
        return nazwa;
    }

    public void setNazwa(String nazwa) {
        this.nazwa = nazwa;
    }

    public long getMaksymalnyCzas() {
        return maksymalnyCzas;
    }

    public void setMaksymalnyCzas(long maksymalnyCzas) {
        this.maksymalnyCzas = maksymalnyCzas;
    }

}

問題類

public class Problem {
    private long id;
    private String tytul;
    private String opis;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate dataZgloszenia;
    private float kosztRozwiazania;
    private boolean rozwiazany;
    private Priorytet priorytet;

    public Problem(long id, String tytul, String opis, LocalDate dataZgloszenia, float kosztRozwiazania, boolean rozwiazany, Priorytet priorytet) {
        this.id = id;
        this.tytul = tytul;
        this.opis = opis;
        this.dataZgloszenia = dataZgloszenia;
        this.kosztRozwiazania = kosztRozwiazania;
        this.rozwiazany = rozwiazany;
        this.priorytet = priorytet;
    }

    public Problem() {

    }

    public long getId() {
        return id;
    }

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

    public String getTytul() {
        return tytul;
    }

    public void setTytul(String tytul) {
        this.tytul = tytul;
    }

    public String getOpis() {
        return opis;
    }

    public void setOpis(String opis) {
        this.opis = opis;
    }

    public LocalDate getDataZgloszenia() {
        return dataZgloszenia;
    }

    public void setDataZgloszenia(LocalDate dataZgloszenia) {
        this.dataZgloszenia = dataZgloszenia;
    }

    public Float getKosztRozwiazania() {
        return kosztRozwiazania;
    }

    public void setKosztRozwiazania(float kosztRozwiazania) {
        this.kosztRozwiazania = kosztRozwiazania;
    }

    public Boolean getRozwiazany() {
        return rozwiazany;
    }

    public void setRozwiazany(boolean rozwiazany) {
        this.rozwiazany = rozwiazany;
    }

    public Priorytet getPriorytet() {
        return priorytet;
    }

    public void setPriorytet(Priorytet priorytet) {
        this.priorytet = priorytet;
    }
}

控制器

@Controller
public class kontroler {
    private static List<Problem> lista = new ArrayList<>();
    private static List<Priorytet> priorytetList = new ArrayList<>();

    @GetMapping(value = "/wypelnij")
    public String wypelnij(Model model){
        Priorytet priorytet = new Priorytet(0,"Najniższy",14);
        priorytetList.add(priorytet);
        priorytet = new Priorytet(1,"Średni",7);
        priorytetList.add(priorytet);
        priorytet = new Priorytet(2,"Najwyższy",2);
        priorytetList.add(priorytet);

        LocalDate date1 = LocalDate.of(2017, 1, 13);
        LocalDate date2 = LocalDate.of(2021, 10, 8);
        var a = new Problem(0,"Przykladowy problem numer 1", "Przykładowy opis problemu #1", date1, 155.3f, true, priorytetList.get(1));
        var b = new Problem(1,"Przykladowy problem numer 2", "Przykładowy opis problemu #2", date2, 125.5f, false, priorytetList.get(2));

        lista.add(a);
        lista.add(b);

        model.addAttribute("listaProblemow",lista);
        return "wyswietlLista";
    }

    @GetMapping(value = "/problem")
    public String dodaj(Model model){
        LocalDate date1 = LocalDate.of(2017, 1, 13);
        var b = new Problem(1,"Przykladowy problem", "Przykładowy opis problemu", date1, 125.5f, false, priorytetList.get(0));

        model.addAttribute("problem",b);
        return "wyswietl";
    }

    @GetMapping(value = "/listaProblemow")
    public String dodajLista(Model model){
        model.addAttribute("listaProblemow",lista);
        return "wyswietlLista";
    }

    @GetMapping(value = {"/add", "/edit/{problemId}"})
    private String showForm(@PathVariable(name="problemId", required=false) Integer id, Model model){
        if (id != null) {
            model.addAttribute("problem", lista.get(id));
        }
        else{
            model.addAttribute("problem", new Problem(0,"","",null,0f,false, priorytetList.get(0)));
        }
        model.addAttribute("priorytet", priorytetList);

        return "formularz";
    }

    @PostMapping(value = {"/add", "/edit/{problemId}"})
    private String processForm(@ModelAttribute(name = "problem") Problem problem, Model model, @PathVariable(name="problemId", required=false) Integer id){
        if(id != null){
            lista.set((int) problem.getId(),problem);
        } else {
            problem.setId(lista.size());
            lista.add(problem);
        }

        model.addAttribute("problem", problem);
        return "successView";
    }
}

公式z.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form method="POST" th:object="${problem}">
    <input type="hidden" th:field="*{id}" th:value="*{id}">

    Priorytet:
    <select th:field="*{priorytet.id}">
        <option th:each="p : ${priorytet}" th:value="${p.id}" th:text="${p.nazwa}" th:selected="${p.id == problem.priorytet.id}"></option>
    </select><br>

    Tytuł: <input type="text" th:field="*{tytul}" th:value="*{tytul}"><br>
    Opis: <input type="text" th:field="*{opis}" th:value="*{opis}"><br>
    Data: <input type="date" th:field="*{dataZgloszenia}" th:value="*{dataZgloszenia}"><br>
    Koszt rozwiązania: <input type="number" th:field="*{kosztRozwiazania}" th:value="*{kosztRozwiazania}"><br>
    Rozwiązany:
    <select th:field="*{rozwiazany}">
        <option value="true" th:selected="*{rozwiazany == true}">Tak</option>
        <option value="false" th:selected="*{rozwiazany == false}">Nie</option>
    </select><br>
    <input type="submit" value="Wyślij">
</form>

</body>
</html>

我認為您在這里引用了所有三個對象的相同變量嘗試更改

 priorytetList.add(priorytet);
    priorytet = new Priorytet(1,"Średni",7);
    priorytetList.add(priorytet);
    priorytet = new Priorytet(2,"Najwyższy",2);
    priorytetList.add(priorytet);   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM