it-swarm.com.ru

JSP getAttribute () возвращает ноль

Итак, в моем сервлете у меня есть следующее: 

public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html");
        req.setAttribute("colNames","ka");
        req.setAttribute("items", new String[]{});
        //System.out.println(req.getAttribute("colNames"));
        req.getRequestDispatcher("/index.jsp").forward(req,resp);
}

Мой сервлет:

<%@ page language="Java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c" %>
<%@ page isELIgnored="false"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>NewGem OrderInfo</title>
    <script src="sorttable.js"></script>
</head>
<body>
<%= request.getAttribute("colNames") %>
<table id="table" class="sortable">
    <tr>
        <c:forEach items="${param.colNames}" var="col">
            <td>${col}</td>
        </c:forEach>
    </tr>
    <c:forEach items="${param.items}" var="row">
        <tr>
            <c:forEach items="${row.elements()}" var="value">
            <td>${value}</td>
            </c:forEach>
        </tr>
    </c:forEach>
</table>
</body>
</html> 

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://Java.Sun.com/xml/ns/javaee"
    xmlns:web="http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <display-name>EntityDumpServlet</display-name>
    <welcome-file-list>
        <welcome-file>dump</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>EntityDumpServlet</servlet-name>
        <servlet-class>
            com.jpmorgan.d1.ptg.web.EntityDumpServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>EntityDumpServlet</servlet-name>
        <url-pattern>/dump</url-pattern>
    </servlet-mapping>
</web-app>

Так что я просто использую get, у меня только этот сервлет.

Я знаю, что мне следует использовать JSTL, и это так, но это был мой способ проверить, что это не проблема JSTL, а проблема с Java. У кого-нибудь есть идеи?

PS: если я делаю только <%= request %>, я получаю [email protected], поэтому проблема не в том, чтобы не приводить результат к String.
А если я выполняю на сервлете функцию System.out.println(req);, я получаю [email protected], что означает, что по какой-то причине запрос прошел и получился другим?

Результат: оказалось, что по какой-то причине IDE делает какие-то странные вещи и привел эту проблему в пересылку. Когда я развернул его с помощью скомпилированного maven файла WAR на Tomcat, он работал нормально.

5
Alex Botev

Вы не типизируете его в String .request.getAttribute() вернет Object.

Попробуйте использовать это и посмотрите, работает ли это:

String value = (String)request.getAttribute("colnames");

Или же 

<%= (String)request.getAttribute("colNames") %>

Почему вы используете forEach здесь? Вам просто нужно отобразить String право? Кроме того, var="col" не должно быть ------> var = "colNames"

     <tr>
        <c:forEach items="${param.colNames}" var="col">
            <td>${col}</td>
        </c:forEach>
    </tr>
6
JNL

Вам нужно использовать,

request.getSession().setAttribute("colNames",yourObject);

Чтобы сохранить его через запрос/ответ, а затем извлеките его из сеанса на странице JSP.

1
ChadNC

Для меня это была проблема с сервером Tomcat 7. Я обновил его до 8.5, и теперь он работает нормально.

0
wiTcH_doCtoR