Язык выражений, не показывать значение переменной

Я новичок в Java EE, я пытаюсь использовать этот .war файл http://community.jboss.org/wiki/ThreadDumpJSP, но кажется, что файл index.jsp не показывает переменную, я вижу только ${thr.name} ${thr.state} ${thr.priority} ${thr.daemon} Я тестирую ее на jboss и tomcat 6

изменить:

вот код:

package org.jboss.varia.threaddump.ThreadDumpBean;

import java.io.Serializable;import java.util.*;

public class ThreadDumpBean implements Serializable {

    private final Map traces;

    public ThreadDumpBean() {traces = new TreeMap(THREAD_COMP);traces.putAll(Thread.getAllStackTraces());}

    public Collection getThreads() {return traces.keySet();}

    public Map getTraces() {return traces;}

    /*** Compare the threads by name and id.*/
    private static final Comparator THREAD_COMP = new Comparator() {  
        public int compare(Thread o1, Thread o2) {    
            int result = o1.getName().compareTo(o2.getName());    
            if (result == 0) {      
                Long id1 = o1.getId();      
                Long id2 = o2.getId();      
                return id1.compareTo(id2);    
            }    
            return result;  
        }};
}

и .jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

<jsp:useBean id="threadDump"
             class="org.jboss.varia.threaddump.ThreadDumpBean"
             scope="request"/>

<html>
<body>
<h2>Thread Summary</h2>
<table cellpadding="5" cellspacing="5">
  <tr>
    <th>Thread</th>
    <th>State</th>
    <th>Priority</th>
    <th>Daemon</th>
  </tr>
  <c:forEach items="${threadDump.threads}" var="thr">
    <tr>
      <td><c:out value='<a href="#${thr.id}">${thr.name}</a>' escapeXml="false"/></td>
      <td><c:out value="${thr.state}"/></td>
      <td><c:out value="${thr.priority}"/></td>
      <td><c:out value="${thr.daemon}"/></td>
    </tr>
  </c:forEach>
</table>

<h2>Thread Stack Traces</h2>
<c:forEach items="${threadDump.stackTraces}" var="trace">
  <h4><c:out value='<a name="${trace.key.id}">${trace.key}</a>' escapeXml="false"/></h4>
  <pre>
  <c:forEach items="${trace.value}" var="traceline">
      at <c:out value="${traceline}"/></c:forEach>
  </pre>
</c:forEach>

</body>
</html>

Ответ 1

Если вы разворачиваете страницу JSP на Tomcat 6, вам нужно включить язык выражения, чтобы использовать ее (по соображениям обратной совместимости это по умолчанию отключено). Это можно сделать, создав файл web.xml, где версия спецификации Servlet установлена ​​как минимум 2.4. Ваш файл web.xml должен выглядеть примерно так:

<web-app id="TreadDumpApp" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd";>

</web-app>

Чтобы использовать EL вне атрибутов тега JSP, вам нужно добавить событие more magic в web.xml

<web-app {...magic from above...}>    
<jsp-property-group>  
<url-pattern>/*</url-pattern>  
<el-ignore>false</el-ignore>
</jsp-property-group>
</web-app>

Вы также должны заставить эту единственную страницу разрешить EL, но добавив это объявление в начало страницы:

<%@ page isELIgnored ="false" %> 

Да, это двойное отрицание довольно элегантно, а?; -)