为什么静态字段的 getter 方法不能是静态的,以便该字段可见?

时间:2021-03-28 19:47:33

标签: java spring thymeleaf

我正在使用 Spring Boot 和 Thymeleaf。我想知道如果静态字段的 getter 方法本身是静态的(无论 setter 是否是静态的),为什么会出现以下错误:

Caused by: org.springframework.beans.NotReadablePropertyException: Invalid property 'rb' of bean class [rs.co.UcenikBean]: Bean 属性 'rb' 不可读或具有无效的 getter 方法:返回类型是否为getter 是否匹配 setter 的参数类型?

该字段是静态的,只有在 getter 方法不是静态的情况下才可以访问。

类的代码:

public class UcenikBean implements Serializable {
    static final long serialVersionUID = 1234L;
    public static Integer rb = 0;
    private String ime;
    private String prezime;
    private char pol;
    private String datumRodjenja;
    private String mejl;
    private int razred;
    private int odeljenje;
    private String bojaOciju;

    public UcenikBean() {
        super();
        idUcenik++;
        // TODO Auto-generated constructor stub
    }

public UcenikBean(String ime, String prezime, char pol, String datumRodjenja, String mejl,
            int razred, int odeljenje, String bojaOciju) {
        super();
        idUcenik++;
        this.ime = ime;
        this.prezime = prezime;
        this.pol = pol;
        this.datumRodjenja = datumRodjenja;
        this.mejl = mejl;
        this.razred = razred;
        this.odeljenje = odeljenje;
        this.bojaOciju = bojaOciju;
    }

    public static Integer getRb() { // rb is not accesible if this is static
        return rb;
    }
    public static void setRb(Integer rb) {
        UcenikBean.rb = rb;
    }
public static long getSerialversionuid() {
        return serialVersionUID;
    }
    public String getIme() {
        return ime;
    }
    public void setIme(String ime) {
        this.ime = ime;
    }
    public String getPrezime() {
        return prezime;
    }
    public void setPrezime(String prezime) {
        this.prezime = prezime;
    }
    public char getPol() {
        return pol;
    }
    public void setPol(char pol) {
        this.pol = pol;
    }
    public String getDatumRodjenja() {
        return datumRodjenja;
    }
    public void setDatumRodjenja(String datumRodjenja) {
        this.datumRodjenja = datumRodjenja;
    }
    public String getMejl() {
        return mejl;
    }
    public void setMejl(String mejl) {
        this.mejl = mejl;
    }
    public int getRazred() {
        return razred;
    }
    public void setRazred(int razred) {
        this.razred = razred;
    }
    public int getOdeljenje() {
        return odeljenje;
    }
    public void setOdeljenje(int odeljenje) {
        this.odeljenje = odeljenje;
    }
    public String getBojaOciju() {
        return bojaOciju;
    }
    public void setBojaOciju(String bojaOciju) {
        this.bojaOciju = bojaOciju;
    }
}

我的控制器中的相关代码:

@RequestMapping(value = {"/lista", "/"}, method = RequestMethod.GET)
public String lista(Model model) {
    UcenikBean x = new UcenikBean("Marko", "Markovic", 'm', new Date(2010, 1, 3), "p@mail.com", 5, 5, "plava");
    listaUcenika.add(x);
    model.addAttribute("listaUcenika", listaUcenika);
    model.addAttribute("ucenikBean", x);
    return "lista";
}

@RequestMapping(value = {"/odabirUcenika"}, method = RequestMethod.POST)
public String ispis(Model model, UcenikBean ucenikBean,
String dodavanje, String menjanje, String brisanje) {
    model.addAttribute("listaUcenika", listaUcenika);
    model.addAttribute("ucenikBean", ucenikBean);
    int x = ucenikBean.getRb();
    return "lista";
}

这是列表页面:

<!DOCTYPE html>
<html xmlns:th="http://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Lista Učenika</title>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
crossorigin="anonymous">
</head>
<body>
<form class="form-group" id="formaUcenik" method="POST" action="/odabirUcenika"
            th:action="@{/odabirUcenika}" th:object="${ucenikBean}">

            <select th:if="${! listaUcenika.isEmpty()}" class="form-control" th:field="*{rb}">
            <option th:each="ucenik : ${listaUcenika}"
            th:value="${ucenikStat.index}"
            th:text="${ucenikStat.index} + ' ' + ${ucenik.ime} + ' ' + ${ucenik.prezime}"/>         
            </select>
            <input class="form-control" type="submit" value="Posaljite">
</form>
</body>
</html>

用户输入的值应保存在 'rb' 字段中,并转移到下一个映射中,在此示例中,它将打印到控制台。请您解释一下,如果静态字段 'rb' 的 getter 方法也是静态的,为什么它无法访问?

0 个答案:

没有答案
相关问题