el取出jsp頁面定義的變量

${s}指取page、requst、session、application四個範圍內的屬性attributejavascript

1、若是想要使用el表達式或者是${}取出來,在這四個域中必需要set進去:html

(1)使用request.setAttributejava

<%
String str = "abc";
request.setAttribute("s",str);
%>

(2)使用<c:set var="s" value="abc" scope="page|request"/>json

這樣,在頁面能夠使用${s}或${requstScope.s}取出session

 

若是僅僅是這樣作,而沒有在request等域中set進去,那麼是取不到值的:app

<!--只是在jsp翻譯而得的類中service方法中定義一個局部變量而已-->
<%
  String str = "abc";
%>

2、更簡單的寫法:jsp

能夠在JSP頁面定義變量,使用<%%>取出便可,例如:google

<%
    String id = request.getParameter("id");
    int val = 999;
%>
<%=id%>
<%=val%>spa

 

項目代碼JSP:翻譯

<body>
<% String myHost = (String)request.getAttribute("requestHost") ;
	if(myHost == null || myHost.equals("localhost:8080")){
		 myHost = "e.test";
	};
	request.setAttribute("myHost",myHost);
    request.setAttribute("queryParam","1");
%>
<span>
   <a onclick="window.location='https://${myHost}/test/login'" href="javascript:void(0);" >
      快捷登陸
   </a>
</span>
</body>

須要注意的是使用EL表達式能夠順利取出,由於EL表達式會依次從幾個域中取值,直到取到值爲止,可是使用struts2的標籤<s:>取值不能夠,除非

指定JSP頁面的做用域,例如:

<s:if test='#queryParam=="1"'><!-- 這麼寫會發現永遠顯示bbb -- >
  aaa
</s:if>
<s:else>
  bbb
</s:else>
<s:if test='%{#request.queryParam=="1"}'><!-- 這麼寫會發現能夠正確取到queryParam,由於指定了做用域爲request-- >
  aaa
</s:if>
<s:else>
  bbb
</s:else>
<s:textfield name="queryParam"/><!-- 不能取到值 -- >
<s:textfield name="%{#request.queryParam}"/><!-- 能夠取到值 -- >
<s:textfield name="#request.roleTypeFlag"/><!-- 能夠取到值,不須要寫%{} -- >
${ queryParam} <!-- 能夠取到值 -- >

IE中的問題:

在IE中,若是在循環<s:iterator value="consumptions" var="obj" status="l">中獲取被循環的consumptions的總長度,會獲取不到,能夠這麼作:

(1)在JSP頁面定義變量,而後放入請求域中(在struts2中保存在值域中的值,爲何能夠在請求域request中取到,可是在session中取不到,不明白原理...):

<%
        java.util.ArrayList consumptions = (java.util.ArrayList)request.getAttribute("consumptions");//這裏須要寫全類名,覺得java.util在jsp頁面沒有引入
        System.out.println(consumptions.size());//獲取consumptions集合的長度
        System.out.println("獲取的consumptions的長度..."+request.getAttribute("consumptions.size"));//這麼寫也能夠獲取consumptions的長度
        request.setAttribute("size",consumptions.size());
        request.setAttribute("size",request.getAttribute("consumptions.size"));
%>

(2)在循環中,利用el表達式獲取請求域request中的值

<s:iterator value="consumptions" var="obj" status="l">
   <!-- 這麼寫能夠正確的獲取到 -->
   ${size}
   <!-- 這麼寫在IE中獲取的集合爲空[],獲取集合的長度爲0,可是在google中能夠正確獲取到 -->
   <s:property value="consumptions.size"/>
</s:iterator>

 

注:request.getAttribute("")能夠從struts2的值棧中取值,而request.getParameter("");只能從請求參數中取值

項目中從值棧中取值:

在JSP頁面循環輸出<tr><th><td></td></th></tr>

值棧中object的operationerDepEn 屬性中保存的值爲:"{"計劃":"2013-2018","實際":"2013-2018"}";

//operationerDepEn 爲值棧中object對象的屬性,有getOperationerDepEn()方法
//該屬性類型爲字符串,保存的時候是保存JSON格式的字符串
<%
String operationerDepEn = (String)request.getAttribute("object.operationerDepEn");
Map<String,String> map = null;
//判斷是否有值,而且含有"{",若是有,表示保存的時候保存的值是JSON字符串格式
if(operationerDepEn != null && operationerDepEn.indexOf("{") != -1){
	map = (Map)JSON.parse(operationerDepEn); //把JSON格式的字符串轉化爲Map 
}
if(map != null){
	for(String key:map.keySet()){
        //循環輸出多個tr
		out.println("<tr><th>"+key+"</th><td>"+map.get(key)+"</td></tr>");
	}
}
%>

JSP頂部引入java類:

<%@ page import="com.alibaba.fastjson.JSON" %>
<%@ page import="java.util.Map" %>

頁面顯示效果:

相關文章
相關標籤/搜索