表达式语言,不显示变量值

Posted

技术标签:

【中文标题】表达式语言,不显示变量值【英文标题】:Expression language, don't show variable value 【发布时间】:2011-09-24 05:00:54 【问题描述】:

我是 Java EE 的新手,我正在尝试使用 .war 文件 http://community.jboss.org/wiki/ThreadDumpJSP ,但似乎 index.jsp 文件没有显示变量,我只看到 $thr.name $thr.state $thr.priority $thr.daemon 我在 @987654326 上对其进行了测试@和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>

【问题讨论】:

我在这里找到了代码:itblackbelt.wordpress.com/2006/09/12/… 【参考方案1】:

如果您在 Tomcat 6 上部署 JSP 页面,您需要启用表达式语言才能使用它(出于向后兼容性的原因,默认情况下禁用此功能)。这可以通过创建一个 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>

要在 JSP 标签属性之外使用 EL,需要在 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" %> 

是的,那个双重否定很优雅,是吗? ;-)

【讨论】:

以上是关于表达式语言,不显示变量值的主要内容,如果未能解决你的问题,请参考以下文章

C语言进阶--++/--

js如何动态循环给数组名加入变量值?

++ 和 -- 操作符

wincc变量值乘100显示

三目运算符

Golang学习笔记---go语言变量常量的定义及赋值