Язык выражений, не показывает значение переменной - PullRequest
1 голос
/ 28 июня 2011

Я довольно новичок в 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:

<code><%@ 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>
  
</ С: Foreach>

1 Ответ

1 голос
/ 28 июня 2011

Если вы развертываете страницу JSP на Tomcat 6, вам нужно включить язык выражений, чтобы использовать ее (из соображений обратной совместимости это отключено по умолчанию).Это можно сделать, создав файл web.xml, в котором версия спецификации сервлета установлена ​​как минимум на 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, вам нужно добавить больше волшебства события в 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" %> 

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

...