从Bean类型的数组列表填充JSP中的下拉列表

苏马夫

在我的Java EE项目中,我具有以下Servlet:

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

import javax.naming.InitialContext;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

/**
 * Servlet implementation class TitlePopulatorServlet
 */
@WebServlet("/TitlePopulatorServlet")
public class TitlePopulatorServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public TitlePopulatorServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("Inside doGet()!");

        ArrayList<BeanTitle> bt=new ArrayList<BeanTitle>();

        java.io.PrintWriter out = response.getWriter();
        response.setContentType("text/html"); 

        Connection conn=null;


        try {
            /* get the DataSource from using the JNDI name */
            Class.forName("com.mysql.jdbc.Driver");
            InitialContext ctx = new InitialContext();
            DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/Test");

            //Create connection and then continue as usual other JDBC calls 
            conn=ds.getConnection();
            System.out.println("\nConnection Successful in TitlePopulatorServlet !");
            Statement s= conn.createStatement();
            ResultSet rs=s.executeQuery("SELECT * FROM story");

            while (rs.next() ) 
            {
                BeanTitle b = new BeanTitle();
                b.setBtitle(rs.getString(1));
                bt.add(b);
            }

        } catch (Exception e){
            out.println("Failed!"+ e);
        }


            request.setAttribute("bt", bt);                                                         
            request.getRequestDispatcher("/StoryTitlePage.jsp").forward(request,response);


    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {



    }
}

BeanTitle如下:

public class BeanTitle 
{
    private String btitle;

    public String getBtitle() {
        return btitle;
    }

    public void setBtitle(String btitle) {
        this.btitle = btitle;
    }
}

JSP页面(“ StoryTitlePage.jsp”)如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


<html>
<head>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<jsp:useBean id="storylist" class="serv.TitlePopulatorServlet" scope="request" />

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Story Title Page</title>
</head>
<body>

<form action="/ReportData/DisplayReport" method="post" >

        Please select an element: 

        <select id="selectedRecord" name="selectedRecord">

            <c:forEach var="item" items=${storylist.bt} >
                <option>${item.tarr}</option>
            </c:forEach>
        </select>

        <input type="submit" value="Submit"> 

    </form>

</body>
</html>

但是,当我在服务器上启动TitlePopulatorServlet时,它不起作用。迭代/ EL在哪里出错?

尼伯(JB Nizet)

Servlet将列表存储在请求中名为“ bt”的属性下。因此,它已经在请求中了。没必要做

<jsp:useBean id="storylist" class="serv.TitlePopulatorServlet" scope="request" />

那只会创建一个新的servlet实例,这没有任何意义。bt是一个请求属性。它不是servlet的属性。因此,使用${storylist.bt}也没有任何意义。

您想遍历的元素bt,因此您所需要做的就是

<c:forEach var="item" items="${bt}">

最后,的每个项目bt都是类型BeanTitle而你在做

${item.tarr}

这相当于调用

beanTitle.getTarr()

BeanTitle中没有tarr属性。唯一的属性是btitle(因为该类的唯一吸气剂被命名为getBTitle())。

所以你必须使用的是

${item.btitle}

您的命名很糟糕,只会让您更加困惑。您为什么不使用真实的单词来命名您的类和属性?例如

public class Book {
    private String title;

    public String getTitle() 

    ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从数组填充下拉列表

来自分类Dev

数组中的php下拉列表未填充

来自分类Dev

在Codeigniter中填充下拉列表

来自分类Dev

使用JSON数组中的键填充选择下拉列表

来自分类Dev

如何用数组中的项目来填充下拉列表?

来自分类Dev

使用数组中的值填充下拉列表框

来自分类Dev

比较数组和填充下拉列表的值

来自分类Dev

无法使用php数组填充下拉列表

来自分类Dev

PHP从多维数组预填充下拉列表

来自分类Dev

从表中的其他下拉列表填充多个下拉列表

来自分类Dev

下拉列表中的数组(Handsontable)

来自分类Dev

如何使用JavaScript自动选择jsp下拉列表中的值以查看填充数据

来自分类Dev

如何从数据库动态填充我的JSP页面中的下拉列表?

来自分类Dev

在AngularJS中动态填充下拉列表

来自分类Dev

在angularjs中填充下拉列表选择

来自分类Dev

下拉列表未从项目集合中填充

来自分类Dev

使用Ajax在Django中填充下拉列表

来自分类Dev

使用CodeIgniter填充表单中的下拉列表

来自分类Dev

从填充的下拉列表中获取价值

来自分类Dev

在Alfresco分享中填充下拉列表

来自分类Dev

在php html中从mysql填充下拉列表

来自分类Dev

单击按钮时,JSP从数据库填充下拉列表

来自分类Dev

如何禁用JSP中的下拉列表?

来自分类Dev

数据库中的JSP下拉列表

来自分类Dev

在JSP中获取空下拉列表

来自分类Dev

JSTL下拉列表在JSP中为空

来自分类Dev

PHP foreach循环使用数组数组中的值填充下拉列表

来自分类Dev

从JSON填充下拉列表

来自分类Dev

jQuery填充下拉列表