gpt4 book ai didi

java - JSP - 错误java.lang.String没有属性

转载 作者:太空宇宙 更新时间:2023-11-04 06:17:04 24 4
gpt4 key购买 nike

我仍然收到此错误:

org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: The class 'java.lang.String' does not have the property '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,但我不知道问题出在哪里。感谢帮助。

最佳答案

问题出在这一行:

<c:set var="list" value=" <%=eng.selectFromDb.appLayer.MotoBO.getAll() %> " />

您不能在 JSTL 属性内使用 scriptlet 表达式。您根本不应该使用 scriptlet 表达式。访问数据库应该从 Controller 用 Java 完成。结果(模型)应存储在请求属性中,以便 View 访问和显示它。这就是MVC的基本原理。

将以下代码放入 Controller (例如 servlet)中:

List<MotorBykes> list = MotoBO.getAll();
request.setAttribute("list", list);

删除 <c:set>从您的 JSP View 来看。

关于java - JSP - 错误java.lang.String没有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27947569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com