${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>
在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" %>
页面显示效果: