我正在使用 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 方法也是静态的,为什么它无法访问?