JSTL Foreach不输出数据[重复]

问题描述 投票:0回答:1

此问题已经在这里有了答案:

我是Java的新手,并一直在尝试使用JSTL foreach将数据从数据库输出到JSP。

我一直在关注这个问题的主要答复:Show JDBC ResultSet in HTML in JSP page using MVC and DAO pattern。尽管这对我来说并不成功,因为我的代码不输出数据。

我正在使用VSCode,Maven,JDK和Servlet 2.3

offered.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

///

<c:forEach items="${listings}" var="listing">
    <div class="l_tile">
        <div class="text">
            <div class="title">
                <c:out value="${listing.type}" /> -
                <c:out value="${listing.category}" />
            </div>
            <div class="title">
                <c:out value="${listing.title}" />
                <c:out value="${listing.condition}" />
            </div>
            <br>
            <div class="title">
                <c:out value="${listing.description}" />
            </div>
        </div>
        <div class="sector">
            <button class="view" id="myBtn">View</button>
        </div>
    </div>
</c:forEach>

view_listings_servlet.java

@WebServlet("/view_listings_servlet")
public class view_listings_servlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private String url = "jdbc:sqlserver://localhost:1433;databaseName=CommunityRecycle;user=CommunityRecycleAdmin;password=59^7K1Nht#x3";
    private ListingDAO listingDAO;

    @Override
    public void init() {
        listingDAO = new ListingDAO(url);
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        try {
            List<Listing> listings = listingDAO.list();
            System.out.println(listings);
            request.setAttribute("listings", listings); // Will be available as ${listings} in JSP
            request.getRequestDispatcher("offered.jsp").forward(request, response);

        } catch (Exception e) {
            System.out.println();
            e.printStackTrace();
        }
    }
}

ListingsDAO.java

public class ListingDAO {

    private String url;

    public ListingDAO(String url) {
        this.url = url;
    }

    public List<Listing> list() throws SQLException {
        List<Listing> listings = new ArrayList<Listing>();

        try (Connection connection = DriverManager.getConnection(url)) {
            CallableStatement viewListings_SP = connection.prepareCall("{call viewListings_SP(?)}");
            viewListings_SP.setInt("type", 2);
            ResultSet rs = viewListings_SP.executeQuery();

            while (rs.next()) {
                Listing listing = new Listing();
                listing.setType(rs.getString(1));
                listing.setTitle(rs.getString(2));
                listing.setCategory(rs.getString(3));
                listing.setDescription(rs.getString(4));
                listing.setCondition(rs.getString(5));
                listing.setState(rs.getString(6));
                listings.add(listing);
            }
        }

        return listings;
    }
}

Listing.java

public class Listing {

    private String type;
    private String title;
    private String category;
    private String description;
    private String condition;
    private String state;

    public String getType() {
        return type;
    }

    public String getTitle() {
        return title;
    }

    public String getCategory() {
        return category;
    }

    public String getDescription() {
        return description;
    }

    public String getCondition() {
        return condition;
    }

    public String getState() {
        return state;
    }

    public void setType(String type) {
        this.type = type;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public void setCondition(String condition) {
        this.condition = condition;
    }

    public void setState(String state) {
        this.state = state;
    }
}

System.out.println(lists)的输出;

[Listing@15a1b7a4, Listing@7b2d8d89, Listing@529e2fd0]

代码输出“ $ {listing.type}”,“ $ {listing.category}”等,而不是实际数据。

对此的任何帮助将不胜感激。

java maven jetty jstl
1个回答
0
投票

引用另一个answer

但是,当我在装有Tomcat 5.5的Unix(CentOS)平台上部署war文件时,EL表达式未执行并给出我的输出像:

${prod.id} ${prod.name}

换句话说,EL表达式根本不会得到评估,因此显示为纯文本?可以具有以下一项或多项原因:

  1. 有问题的应用程序服务器不支持JSP 2.0。
  2. web.xml未声明为Servlet 2.4或更高版本。
  3. JSP的<%@page %>配置为isELIgnored=true
  4. web.xml<el-ignored>true</el-ignored>中配置为<jsp-config>

Tomcat 5.5是Servlet 2.4 / JSP 2.0,因此#1可能会被划伤。你没我假设在部署之前更改webapp中的任何内容,因此#3和#4可以可能会被划伤。现在离开#2。也许您将其声明为Servlet 2.5适用于Tomcat 6.0,而Tomcat 5.5仅了解Servlet 2.4。这样,一切都会像Tomcat一样变得一团糟然后退回至最低兼容方式。您需要重新声明web.xml作为Servlet 2.4,以便它在Tomcat 5.5中均可使用和6.0。声明应类似于:

<web-app
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <!-- Here you go. -->

</web-app>
© www.soinside.com 2019 - 2024. All rights reserved.