2017-08-04 1 views
0

IKann mein hashmap nicht in jstl Arbeit bekommen

Map<String, Boolean> seatsModelComplete = new LinkedHashMap<>(); 

Der string stellt Sitznummer ein Map in einem Servlet haben und die Boolean sagt, wenn der Sitz reserviert ist oder nicht.

stelle ich das Attribut in der Anfrage wie folgt:

request.setAttribute("seats", seatsModelComplete); 

aber ich kann es nicht in einer JSP Arbeit bekommen. Insbesondere wird die Karte nicht durch den folgenden foreach iteriert erhält

<c:forEach items="${requestScope.seats}" var="seats"> 
... 
</c:forEach> 

Hier ist meine Servlets:

@WebServlet (name = "SeatsServlet", urlpatterns = "/ Sitze")

public class SeatsServlet extends HttpServlet { 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

List<MovieDTO> movieDTOList = (List<MovieDTO>) request.getSession().getAttribute("movieDTOList"); 


int movie_id = Integer.parseInt(request.getParameter("movie_id")); 

int hall_id = Integer.parseInt(request.getParameter("hall_id")); 

int showtime_id = Integer.parseInt(request.getParameter("showtime_id")); 

     MovieDTO selected_movie = null; 

     Hall selected_hall = null; 

     Showtime selected_showtime = null; 
     for (MovieDTO m : movieDTOList) { 
      if (m.getId() == movie_id) { 
       selected_movie = m; 
       break; 
      } 
     } 
     if (selected_movie != null) { 
      request.setAttribute("movie_title", selected_movie.getTitle()); 
     } 

     for (Hall h : selected_movie.getHallList()) { 
      if (h.getId() == hall_id) { 
       selected_hall = h; 
       break; 
      } 
     } 
     if (selected_hall != null) { 
      request.setAttribute("hall_id", selected_hall.getId()); 
     } 

     for (Showtime s : selected_hall.getShowtimes()) { 
      if (s.getId() == showtime_id) { 
       selected_showtime = s; 
       break; 
      } 
     } 
     if (selected_showtime != null) { 
      request.setAttribute("showtime_time", selected_showtime.getTime()); 
     } 
     List<Seat> seats = selected_showtime.getSeats(); 


     int maxRows = (PropertyHolder.getInstance().getMaxRowsCount().toLowerCase().toCharArray()[0] - 'a') + 1; 
     int maxNumbers = Integer.parseInt(PropertyHolder.getInstance().getMaxNumberCount()); 

     String aSeat; 
     boolean isReserved; 
     Map<String, Boolean> seatsModelComplete = new LinkedHashMap<>(); 
     for (int i = 0; i < maxRows; i++) { 
      for (int j = 0; j < maxNumbers; j++) { 
       aSeat = (((char)('A' + i)) + "").concat((j + 1) + "") ; 
       isReserved = false; 
       for (Seat seat : seats) { 
        if (seat.getRow().concat(seat.getNumber() + "").equals(aSeat)){ 
         isReserved = true; 
        } 
       } 
       seatsModelComplete.put(aSeat, isReserved); 
      } 
     } 
     request.setAttribute("seats", seatsModelComplete); 
    // request.getSession().setAttribute("seats", seatsModelComplete); map gets passed only here, not in request scope 

     request.getRequestDispatcher("/pages/seat_selection/seat_selection.jsp").forward(request, response); 

    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     doPost(request, response); 
    } 
} 
diese
+1

Mögliche Duplikat [? Wie Schleife durch eine HashMap in JSP] (https://stackoverflow.com/questions/1835683/how-to-loop-through-a- hashmap-in-jsp) – Flown

+0

Sind Sie sicher, dass Elemente zu dieser Karte hinzugefügt werden? –

+0

herausgefunden, dass Karte in Sitzung, aber nicht in Anforderung Bereich übergeht – Roms

Antwort

0

Sind Sie sicher, dass Sie es initialisiert? Dumme Frage, aber eh ... Versuchen Sie auch, Sie so etwas wie könnte

<c:forEach items="${seats}" var="seat"> 
    <option value="${seat.key}">${seat.taken}</option 
</c:forEach> 

Edit: es ist möglich, dass Sie etwas nach oben mit dem jsp messed, können Sie immer überprüfen, ob Ihre Sammlung richtig initialisiert und/oder im richtigen Rahmen zu finden:

<c:choose> 
    <c:when test="${empty seats}"> 
     Seats are empty or null. 
    </c:when> 
    <c:otherwise> 
     Seats are not empty or null 
    </c:otherwise> 
</c:choose> 
+0

Das ist sehr hilfreich thx, ich testete und es zeigte leer oder null, sehr seltsam, debugge ich mein Servlet und Karte füllt – Roms

+0

Können Sie die Frage zu schließen und die Antwort akzeptieren? :) –

+0

Ich bin das erste Mal hier. Wie man es schließt? – Roms

0

Verwendung:

<c:forEach items="${seats}" var="seat"> 
    Key is ${seat.key} 
    Value is ${seat.value} 
</c:forEach> 
+0

einrichten Danke für die schnelle Antwort, ich habe versucht, aber nicht in die Schleife, springt einfach .. – Roms

+0

Können Sie Ihren gesamten Code von Servlet in Frage? Ich denke, dass wird besser sein – sForSujit

+0

Thx, es ist fertig ... – Roms

Verwandte Themen