Mam aplikację internetową, która wyświetla szczegóły harmonogramu filmu (pobrane z bazy danych MySQL), gdy użytkownik kliknie plakat filmowy.Wartości niewyświetlane dla języka wyrażeń
Bean:
import java.sql.Date;
import java.sql.Time;
public class Schedule {
private String[] malls;
private Integer[] cinemas;
private Double[] prices;
private Date[] dates;
private Time[] times;
// getters and setters
}
Servlet:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int movieId = request.getParameter("movieid") != null ? Integer.parseInt(request.getParameter("movieid")) : 0;
if(movieId != 0) {
DatabaseManipulator dm = new DatabaseManipulator();
...
// get schedule details from database
String[] malls = dm.getMallNames(movieId);
Integer[] cinemas = dm.getCinemaNumbers(movieId);
Double[] prices = dm.getMoviePrices(movieId);
Date[] dates = dm.getShowDates(movieId);
Time[] times = dm.getShowTimes(movieId);
// assemble bean objects
Schedule schedule = ScheduleAssembler.getInstance(malls, cinemas, prices, dates, times);
// returns new session if it does not exist
HttpSession session = request.getSession(true);
// bind objects to session
session.setAttribute("schedule", schedule);
session.setAttribute("times", times); // for schedule row count
// redirect to view schedule page
response.sendRedirect("view-schedule.jsp");
} else {
// redirect when servlet is illegally accessed
response.sendRedirect("index.jsp");
}
}
JSP:
<%@ page import="java.sql.*" %>
...
<body>
...
<strong>VIEW MOVIE SCHEDULE</strong>
...
<table id="schedule">
<tr><td class="titlebg" colspan="5">MOVIE SCHEDULE</td></tr>
<tr>
<td class="catbg">Mall</td>
<td class="catbg">Cinema</td>
<td class="catbg">Price</td>
<td class="catbg">Date</td>
<td class="catbg">Time</td>
</tr>
<%
Time[] times = (Time[]) session.getAttribute("times");
int rowCount = times.length;
for(int ctr = 0; ctr < rowCount; ctr++) { %>
<tr>
<td>${schedule.malls[ctr]}</td>
<td class="cinema">${schedule.cinemas[ctr]}</td>
<td>PHP ${schedule.prices[ctr]}</td>
<td>${schedule.dates[ctr]}</td>
<td>${schedule.times[ctr]}</td>
</tr>
<% } %>
</table>
</body>
Jest to dodanie wymaganej liczby wierszy do tabeli harmonogramu (w oparciu o dostępne repozytorium w bazie danych), ale wartości w EL nie pojawiają się.
Test println() w Servletu odpowiednio pobiera wartości tablicowe i zakodowane indeksy tablicowe na dane tabeli (schedule.malls[0]
zamiast ctr
) działa tak, jak być powinno.
Dlaczego wartości nie są wyświetlane po umieszczeniu w pętli for?
Cześć, jak bym chcemy iść z nowoczesną opcją nr 2, jeszcze tego nie poruszaliśmy na lekcjach, ale dziękujemy bardzo za dostarczenie alternatywy. Rewizja i akceptacja jako poprawna odpowiedź. – silver