2017-08-30 47 views
-1

根据很多聪明人在这里,我想用于输出Java变量的语法EL:
${var}而不是<%=var%>带EL的Jsp显示常量字符串,但不能显示变量

要打开EL上,我用:

在web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
version="3.0" metadata-complete="true" id="WebApp_ID"> 

... 

<jsp-config> 
    <jsp-property-group> 
    <url-pattern>*.jsp</url-pattern> 
    <el-enabled>true</el-enabled>    // IntelliJ says these 
    <scripting-enabled>true</scripting-enabled> // two tags are not allowed here 
    </jsp-property-group> 
</jsp-config> 

在根JSP页面的开始和包括jsp页面:

<%@ page isELIgnored="false" %> 

但是当我在包含的或根页面中使用时:

<% 
    String mapName = request.getParameter("mapName"); 
    Map<String,String> map = (Map<String,String>) request.getAttribute(mapName); 
%> 

     ${map.get("header")} 
     ${"-?-"} 
     <%System.out.println("header = " + map.get("header"));%> 

,那么第一个${}没有输出。第二个工作正常,println()打印好了。

我该如何让EL来解析${var}构造?


关于可能的重复。通过@BalusC提到的问题,很有趣,但有很大的不同:

  1. 这不是关于Java变量和常量的可比行为,但只有scriptlet而变量,已经写在request.attributesrequest.parameters
  2. 与答案一起,这一切都与JSTL有关。现在,在2017年,我使用没有JSTL的EL。我正在一个大型项目中工作,我无法添加使用的技术,也没有写出几篇论文!

所以,这下面的回答@ElMahdiBenzekri的对我来说是非常有用的,(我只是想从他那里得到更多的信息),并且两个问题,答案,由BalusC提到的,可能是非常有趣自我教育的意识,但是,对不起,对我的问题绝对无用。

回答

1

您的地图变量是否在EL范围内?你可以试试这个:

<% 
    request.setAttribute("header", map.get("header")); 
%> 

${header} 

以下范围的属性分别扫描,PageContext中(页范围),HttpServletRequest的(请求范围),HttpSession中(会话范围)和ServletContext中(适用范围),直到第一个非找到空值。

你可以在这里找到更多的信息:https://stackoverflow.com/tags/el/info

+0

的“地图”是一个java变量,已经得到了来自请求属性。注意println()可以正确打印其内容。我已经把问题代码放到了地图上。 – Gangnus

+0

我在这里阅读过这篇文章,认为$ {}构造适用于阅读java变量。这是不是真的?无论如何,感谢你和+1为我提供了一个新的方法来获取JSP页面上的值。 – Gangnus