2017-08-30 98 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