Обновление: теперь код находится в github вместе с инструкциями по воспроизведению ошибки (в README.md
> Инструкции по воспроизведению jstl — el — чтение элемента с карты). См. мой другой вопрос для формата мои jsp-файлы. я до сих пор не понял этого
Это работает :
<%
HttpSession ses = (HttpSession) request.getSession(false);
if(ses != null) {
HashMap<String, String> m = (HashMap<String, String>) ses.getAttribute("messages");
if(m != null) { %>
<%=m.get(request.getParameter("r")) %>
<%}
}
%>
Это не:
<c:set var="key" value="${param.r}"/>
<c:out value="${key}" /> <!-- does print what I expect -->
<%-- ${sessionScope.messages} prints nothing --%>
sess scope : ${sessionScope} <%-- prints sess scope : {} --%>
<c:out value="${sessionScope.messages[key]}" /> <!-- nothing !? -->
Зачем ?
jstl-1.2.1 — пробовал также с 1.2
соответствующий jsp ( error_begin.jsp — дополнен error_end .jsp, содержащий только закрывающий }
) :
<%@ page language="java" pageEncoding="UTF-8"%><!-- noway to include this ONCE -->
<%@page import="java.util.HashMap"%>
<% if(request.getAttribute("ErrorString") != null){ %>
Υπήρξε λάθος : ${requestScope.ErrorString}
<%} else { %>
<c:if test="${param.r != null}">
<div class="success" align="center">
<%
HttpSession ses = (HttpSession) request.getSession(false);
if(ses != null){
HashMap<String, String> m = (HashMap<String, String>) ses.getAttribute("messages");
if(m != null){ %>
<%=m.get(request.getParameter("r")) %>
<%}
}
%><c:set var="key" value="${param.r}"></c:set>
<%-- <c:out value="${key}" /> --%>
<%-- ${sessionScope.messages[key]} --%>
<%-- ${sessionScope.messages} prints nothing --%>
sess scope : ${sessionScope} <%-- prints {} --%>
<%-- <c:out value="${sessionScope.messages[key]}" /> --%>
<%-- <c:out value=" ${messages[param.r]}" /> --%>
</div>
</c:if>
<c:forEach items="${messages}" var="entry">
Key = ${entry.key}, value = ${entry.value}<br>
</c:forEach>
Соответствующая часть Web.xml:
<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"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
javax.servlet.jsp.jstl-1.2.1.jar
javax.servlet.jsp.jstl-api-1.2.1.jar
joda-time-2.1-javadoc.jar
joda-time-2.1.jar
logback-classic-1.0.7.jar
logback-core-1.0.7.jar
mail.jar
mysql-connector-java-5.1.22-bin.jar
slf4j-api-1.7.2-javadoc.jar
slf4j-api-1.7.2-sources.jar
slf4j-api-1.7.2.jar
${sessionScope}
? А${sessionScope.messages}
? Обратите внимание, что вам не обязательно использовать для этого<c:out>
, просто EL в тексте шаблона работает так же хорошо (если бы это было не так, у вас были бы серьезные проблемы с окружающей средой). - person BalusC   schedule 23.10.2012Η εργασία διεγράφη ! sess scope : {}
- где греки -<%=m.get(request.getParameter("r")) %>
. Может ли это быть из-за того, что я опускаю}
(добавлено в error_end.jsp) - person Mr_and_Mrs_D   schedule 26.10.2012web.xml
? Соответствует ли он Servlet 3.0? И у вас нет контейнерных библиотек в/WEB-INF/lib
? - person BalusC   schedule 26.10.2012xmlns:web="http://java.sun.com/xml/ns/javaee/web-app
наxmlns:web="http://java.sun.com/xml/ns/javaee/web-app
5.xsd"xmlns:web="http://java.sun.com/xml/ns/javaee"
0.xsd"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app
илиxmlns:web="http://java.sun.com/xml/ns/javaee"
0.xsd"xmlns:web="http://java.sun.com/xml/ns/javaee"
не помогло - см. также: ошибки .eclipse.org/bugs/show_bug.cgi?id=333259 - person Mr_and_Mrs_D   schedule 26.10.2012