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

JSP-错误java.lang.String没有属性,java,jsp,jstl,Java,Jsp,Jstl,我仍然得到这个错误: org.apache.jasper.jaspereException:javax.el.PropertyNotFoundException:类“java.lang.String”没有属性“motoId” 但我有创造二传手和接球手 这是我的简单jsp代码: <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/j

我仍然得到这个错误:

org.apache.jasper.jaspereException:javax.el.PropertyNotFoundException:类“java.lang.String”没有属性“motoId”

但我有创造二传手和接球手

这是我的简单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>
}

dao.getAll()的后面是:

connection();
List ret=new ArrayList();
String textSql=“从motobykes中选择*”;
试一试{
PreparedStatement ps=connection.prepareCall(textSql);
结果集rs=ps.executeQuery();
while(rs.next()){
int motoId=rs.getInt(1);
字符串znacka=rs.getString(2);
字符串模型=rs.getString(3);
String kategoria=rs.getString(4);
int-objem=rs.getInt(5);
int max_rychlost=rs.getInt(6);
摩托比克斯摩托=新摩托比克斯(摩托ID、znacka、model、kategoria、objem、max_rychlost);
ret.add(moto);
}
rs.close();
ps.close();
}catch(SQLException-ex){
processException(“未能获取所有motos”,例如);
}
返回ret;

我知道jstl有问题,但我不知道在哪里。谢谢你的帮助

问题在于这一行:

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

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

将以下代码放入控制器(例如servlet):

List List=MotoBO.getAll();
setAttribute(“列表”,列表);

从JSP视图中删除

并没有说这是问题所在,但我注意到没有
setMotoId
当“motoId”是
int
时,错误提到
String
属性似乎很奇怪。
MotoBO.getAll()
背后的代码是什么?我知道,但现在有问题了,我不想设置MotoId,它正在执行sql.MotoBO.getAll()有以下代码:
public static List getAll(){List ret;MotoDAO dao=new MotoDAO();dao.open();ret=dao.getAll();dao.close();return ret;}
 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;
<c:set var="list" value=" <%=eng.selectFromDb.appLayer.MotoBO.getAll() %> " />
List<MotorBykes> list = MotoBO.getAll();
request.setAttribute("list", list);