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" %>

页面显示效果:

相关文章
相关标签/搜索