Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Помогите разобраться с передачей параметров в JSP


Автор: Shklyar 8.10.2008, 20:49
Трудности возникли с передачей коллекции. В сервлете:
Код

Collection<String> myCollection = new ArrayList<String>();
myCollection.add("v1");
myCollection.add("v2");
myCollection.add("v3");
request.setAttribute("myCollection", myCollection);
getServletContext().getRequestDispatcher("/test.jsp").
    forward(request, response);
return;

JSP:
Код

<%@ taglib uri = "/WEB-INF/tld/c.tld" prefix="c" %>
<c:forEach items="${myCollection}" var="str">
<c:out value="${str} " escapeXml="false"></c:out>
</c:forEach>

Подскажите где ошибка.

Автор: redrick 8.10.2008, 22:55
эммм, а там ошибка какая или что выводится?

Автор: Samotnik 8.10.2008, 23:20
Shklyar, не понятно, что за ошибка. Или весь код дайте, или ошибку уточните
Вообще можно еще через итератор
Код

<%
Collection emp=(Collection)request.getAttribute("myCollection");
Iterator itr=emp.iterator();
while(itr.hasNext()) {
      out.println(itr.next().toString());
}
%>

Автор: Shklyar 9.10.2008, 01:06
Ошибка в результате выполнения программы.
Получаю такой html:
Код


${sp}


Это по примеру из первого поста. Почему так (по части JSTL)?

Попробовал через итератор - как я понял, то itr.hasNext() возвращал false. Видимо что-то в сервлете.

Что еще? Контейнер - Tomcat.

Добавлено через 6 минут и 39 секунд
Одновременно переменную String сервлет передает.

Автор: Samotnik 9.10.2008, 01:21
Shklyar, а саму ошибку религия запрещает показать ? 
Блин, дай ты стек трейс взглянуть  smile 

Автор: Shklyar 9.10.2008, 01:22
Так, а самой ошибки нет.

Автор: Samotnik 9.10.2008, 01:32
Shklyar, Fire Bug  в   Fire Fox  есть ?  Он должен показать, что приходит на страничку
И еще 
перед отправкой данных на страничку напиши  System.out.println(то, что собираешся отправлять)
У меня мысль, что ты  отправляеш  null  smile 

Автор: Shklyar 9.10.2008, 15:19
1. Смотрим первый пост, JSP: почему, вообще, программа заходит в цикл (результат - в html ${sp})?
2. Через итератор стало работать. Мистика. Вопрос можно считать решенным. Сенкс.
3. Когда нажимаю кнопочку остановки Tomcat (в eclipse, tomcatPlugin), то иногда вижу:
Код

ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [../../../src/share/back/util.c:820]


Автор: Samotnik 9.10.2008, 15:33
Цитата

1. Смотрим первый пост, JSP: почему, вообще, программа заходит в цикл (результат - в html ${sp})?

А я от куда знаю ?  smile  У  меня же нету всего кода, который я могу продебажить 
Цитата

2. Через итератор стало работать. Мистика. Вопрос можно считать решенным. Сенкс.

Пажалста!  smile  Хотя вообще, итератор не очень хорошее решение, нарушается философфия  MVC т.к.  на  .jsp появляется  java код
Цитата

3. Когда нажимаю кнопочку остановки Tomcat (в eclipse, tomcatPlugin), то иногда вижу:

Ну я и не такое видел  smile  smile  smile  smile 

Автор: redrick 9.10.2008, 16:36
Samotnik, 
да, скриптлеты эта плоха...

Shklyar, 
вот откуда берется ${sp} вобще не понятно - его даже в твоем коде то и нету....

Автор: Shklyar 9.10.2008, 16:57
Весь код страшненький, только учусь.
Это простенькая фотогалерея.
Вот он:
web.xml
Код

<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD
Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'>

<web-app>
    <servlet>
        <servlet-name>photogallery</servlet-name>
        <servlet-class>photogallery.Photogallery</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>photogallery</servlet-name>
        <url-pattern>/index</url-pattern>
    </servlet-mapping>
</web-app>

Photogallery.java
Код

package photogallery;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Photogallery extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    private String photoThumbnailsFilePathname;
    private String thumbnails[];
    
    public void doGet(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
        photoThumbnailsFilePathname = getServletContext().getRealPath("") +
                File.separator + "images" +
                File.separator + "photo" +
                File.separator + "thumbnails";
        
        thumbnails = (new File(photoThumbnailsFilePathname)).list();
        
        String selectedPhoto = request.getParameter("photo");
        if (selectedPhoto == null || selectedPhoto.length() == 0)
            selectedPhoto = thumbnails[0];
        
        Collection<String> smallPhotos = new ArrayList<String>();
        for (String p: thumbnails) {
            smallPhotos.add(p);
        }
        
        request.setAttribute("bigPhoto", selectedPhoto);
        request.setAttribute("smallPhotos", smallPhotos);
        getServletContext().getRequestDispatcher("/photogallery.jsp").
                forward(request, response);
        return;
    }
}

photogallery.jsp
Код

<%@ page import="java.util.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
    <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1251">
    <TITLE>Photo gallery</TITLE>
    <META NAME="AUTHOR" CONTENT="Oleh Sh.">
    <style>
        img {border-color: #FFF;}
        a {text-decoration: none; color: #888;}
        a img {border-color: #FFF;}
    </style>
</HEAD>
<body style="background: #222;">
<table align="center" border="0" cellspacing="0" cellpadding="4"
    style="text-align: center; font-size: 75%; border-color: #FFF;
    font-family: Verdana, Helvetica, sans-serif; color: #888;">
<tr>
    <td colspan=4><img src="images/photo/<%= request.getAttribute("bigPhoto")
    %>" border="4px" width="700" height="525" alt="">
<br>
<%= request.getAttribute("bigPhoto") %><br><br>
</td>
</tr>
<tr>
<%
int count = 0;
Collection emp=(Collection)request.getAttribute("smallPhotos");
Iterator itr=emp.iterator();
while(itr.hasNext()) {
    String sp = itr.next().toString();
    %><td width="25%"><a href="?photo=<%= sp
    %>"><img src="images/photo/thumbnails/<%= sp
    %>" border="2px" width="133" height="100" alt="<%= sp
    %>"></a></td>
    <%
    if ((++count % 4) == 0)
        out.println("</tr><tr>");
}
while (count % 4 != 0) {
    count++;
    out.println("<td width='25%'> &nbsp; </td>");
}
%></tr>
</table><br>
</body>
</html>

тут добавлял первой строкой
Код

<%@ taglib uri = "/WEB-INF/tld/c.tld" prefix="c" %>

, а там, где итератор
Код

<c:forEach items="${smallPhotos}" var="sp">
<c:out value="${sp} " escapeXml="false"></c:out>
</c:forEach>

Чувствую вопрос о том, что еще сделано, чтоб JSTL работала:
- положил в Tomcat\lib jstl.jar и standard.jar,
- положил в WEB-INF папочку tld (с c.tld, в частности).

Автор: redrick 9.10.2008, 17:17
ну, у тебя не работает JSTL expression ${sp} - проверь что в этой строчке все правильно напечатано

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)