我怎么能从servlet发送一个字符串数组到jsp并在jsp中接收它
我的Servlet代码是
package DBCon; import java.io.*; import java.net.*; import java.util.ArrayList; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; /** * * @author Nayan */ public class loadCourseId extends HttpServlet { /** * Processes requests for both HTTP GET
and POST
methods. * @param request servlet request * @param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); ArrayList ar1=new ArrayList(); ArrayList ar2=new ArrayList(); int i; i=0; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection con=DriverManager.getConnection("jdbc:mysql://localhost/online_exam?"+"user=root&password=pass"); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery("select * from course"); while(rs.next()) { ar1.add(rs.getString(1)); ar2.add(rs.getString(2)); } request.getSession().setAttribute("CourseID", ar1); request.getSession().setAttribute("CourseName", ar2); RequestDispatcher requestDispatcher=getServletContext().getRequestDispatcher("http://localhost:8080/ONLINE_EXAM/removeCourse.jsp"); requestDispatcher.forward(request,response); } catch(Exception e) { out.println(""+e.getStackTrace()+"
"); } } // /** * Handles the HTTP GET
method. * @param request servlet request * @param response servlet response */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Handles the HTTP POST
method. * @param request servlet request * @param response servlet response */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Returns a short description of the servlet. */ public String getServletInfo() { return "Short description"; } // }
和Jsp代码是
window.onload=function LoadCombo() { window.action="loadCourseId.do"; ArrayList cd=new ArrayList(); cd.add(request.getSession().getAttribute("CourseID")); if(cd.isEmpty()==false) { for(int i=0;i<cd.size();i++) { var newOpt = cid.appendChild(document.createElement('option')); newOpt.text = cd.get(i); } } else { alert("Course table is empty") } } Remove Course
通过编写此代码,我无法将项目CourseId添加到comboboxcid中。 你能说我问题出在哪里吗? 谢谢。
您有2个同步列表,其项目彼此相关。 这不容易维护和遍历。 而是将两个列表的值放在Map
。
Map courses = new LinkedHashMap(); // ... while(resultSet.next()) { map.put(resultSet.getString(1), resultSet.getString(2)); } // ... request.setAttribute("courses", courses);
在JSP中,您可以使用JSTL
标记迭代List
或Map
。 对于Map
,每次迭代都会在var
属性中为您提供一个Map.Entry
,而该属性又包含getKey()
和getValue()
方法。 所以这应该做:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ...
此外,您的processRequest()
方法中的前两行
response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter();
应该删除,因为这是JSP的负责任,而不是servlet。 否则,在这样做时,您将冒着IllegalStateException
错误的风险。
还要删除JSP顶部的@page import
。 它们位于错误的位置,所有相关代码都属于servlet。
class MyBean{ String val; String label; //+getters setters method }
Servlet的
//fetching list of MyBean and setting it to request as attribute request.setAttribute("beanList",beanList); // forward this request to jsp
JSP