【发布时间】:2015-03-12 21:50:10
【问题描述】:
我仍然收到此错误:
org.apache.jasper.JasperException:javax.el.PropertyNotFoundException:类“java.lang.String”没有属性“motoId”。
但我已经创建了 setter 和 getter。
这是我的简单jsp代码:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<c:set var="list" value=" <%=eng.selectFromDb.appLayer.MotoBO.getAll() %> " />
<table>
<tr>
<th>ID</th>
<th>Značka</th>
<th>Model</th>
<th>Kategoria</th>
<th>Objem</th>
<th>Maximalna rychlost</th>
</tr>
<c:forEach var= "moto" items=" ${list} " >
<tr>
<td>${moto.motoId}</td>
<td>${moto.znacka}</td>
<td>${moto.Model}</td>
<td>${moto.Kategoria}</td>
<td>${moto.Objem}</td>
<td>${moto.Max_rychlost}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
这里有 setter 和 getter 类:
public class MotorBykes {
static final int EMPTY_ID = -1;
private int motoId = EMPTY_ID;
private String znacka;
private String model;
private String kategoria;
private int objem;
private int max_rychlost;
public MotorBykes(String znacka, String model, String kategoria, int objem, int max_rychlost) {
this.znacka = znacka;
this.model = model;
this.kategoria = kategoria;
this.objem = objem;
this.max_rychlost = max_rychlost;
}
public MotorBykes(int motoId, String znacka, String model, String kategoria, int objem, int max_rychlost) {
this.motoId = motoId;
this.znacka = znacka;
this.model = model;
this.kategoria = kategoria;
this.objem = objem;
this.max_rychlost = max_rychlost;
}
public int getMotoId() {
return motoId;
}
public String getZnacka() {
return znacka;
}
public void setZnacka(String znacka) {
this.znacka = znacka;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getKategoria() {
return kategoria;
}
public void setKategoria(String kategoria) {
this.kategoria = kategoria;
}
public int getObjem() {
return objem;
}
public void setObjem(int objem) {
this.objem = objem;
}
public int getMax_rychlost() {
return max_rychlost;
}
public void setMax_rychlost(int max_rychlost) {
this.max_rychlost = max_rychlost;
}
@Override
public String toString() {
return "MotorBykes{" + "motoId=" + motoId + ", znacka=" + znacka + ", model=" + model + ", kategoria=" + kategoria + ", objem=" + objem + ", max_rychlost=" + max_rychlost + '}';
}
}
dao.getAll() 的后面是:
ensureOpenConnection();
List<MotorBykes> ret = new ArrayList<>();
String textSql = "SELECT * FROM motobykes";
try {
PreparedStatement ps = connection.prepareCall(textSql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
int motoId = rs.getInt(1);
String znacka = rs.getString(2);
String model = rs.getString(3);
String kategoria = rs.getString(4);
int objem = rs.getInt(5);
int max_rychlost = rs.getInt(6);
MotorBykes moto = new MotorBykes(motoId, znacka, model, kategoria, objem, max_rychlost);
ret.add(moto);
}
rs.close();
ps.close();
} catch (SQLException ex) {
processException("Failed to get all motos", ex);
}
return ret;
我知道问题出在 jstl,但我不知道在哪里。感谢帮助。
【问题讨论】:
-
不是说这是问题,但我注意到没有
setMotoId -
当“motoId”是
int时,错误提到String属性似乎很奇怪。MotoBO.getAll()背后的代码是什么? -
我知道但现在是个问题,我不想设置 MotoId,它在做 sql。
-
MotoBo.getAll() 有这个代码:
public static List<MotorBykes> getAll() { List<MotorBykes> ret; MotoDAO dao = new MotoDAO(); dao.open(); ret = dao.getAll(); dao.close(); return ret; }