我没有从jsp中的pageContext对象获取属性,代码:
<%
String username =request.getParameter("name");
if(username!=null){
//session.setAttribute("sessionUsername", username);
//application.setAttribute("appUsername", username);
pageContext.setAttribute( "requestParams",username );
pageContext.setAttribute("requestScope", username, PageContext.REQUEST_SCOPE);
pageContext.setAttribute("sessionScope", username, PageContext.SESSION_SCOPE);
pageContext.setAttribute("applicationScope", username, PageContext.APPLICATION_SCOPE);
}
/* String sessionName =(String)session.getAttribute("sessionUsername");
String applicaString = (String)application.getAttribute("appUsername");
*/
%>
<%-- <br>
the name is : <%=username%>
<br>
the session name is : <%=sessionName%>
<br>
the application name is : <%=applicaString%>
--%>
<br>
the request Scope name is : <%=pageContext.getAttribute("requestScope")%>
<br>
the sessionScope name is : <%=pageContext.getAttribute("sessionScope")%>
<br>
the appication Scope name is : <%=pageContext.getAttribute("applicationScope")%>
<br>
the page Scope name is : <%=pageContext.getAttribute("requestParams")%>
我在应用程序范围和请求范围内变为null,但是当我使用具有默认页面范围的setAttribute方法时,这工作正常。
答案 0 :(得分:0)
尝试将代码更改为:
<%
String username =request.getParameter("name");
if(username!=null){
//session.setAttribute("sessionUsername", username);
//application.setAttribute("appUsername", username);
pageContext.setAttribute( "requestParams",username );
pageContext.setAttribute("requestScope", username, PageContext.REQUEST_SCOPE);
pageContext.setAttribute("sessionScope", username, PageContext.SESSION_SCOPE);
pageContext.setAttribute("applicationScope", username, PageContext.APPLICATION_SCOPE);
}
/* String sessionName =(String)session.getAttribute("sessionUsername");
String applicaString = (String)application.getAttribute("appUsername");
*/
%>
<%-- <br>
the name is : <%=username%>
<br>
the session name is : <%=sessionName%>
<br>
the application name is : <%=applicaString%>
--%>
<br>
the request Scope name is : <%=request.getAttribute("requestScope")%>
<br>
the sessionScope name is : <%=session.getAttribute("sessionScope")%>
<br>
the appication Scope name is : <%=application.getAttribute("applicationScope")%>
<br>
the page Scope name is : <%=pageContext.getAttribute("requestParams")%>
我改变了以下三行代码:
the request Scope name is : <%=pageContext.getAttribute("requestScope")%>
the sessionScope name is : <%=pageContext.getAttribute("sessionScope")%>
the appication Scope name is : <%=pageContext.getAttribute("applicationScope")%>
为:
the request Scope name is : <%=request.getAttribute("requestScope")%>
the sessionScope name is : <%=session.getAttribute("sessionScope")%>
the appication Scope name is : <%=application.getAttribute("applicationScope")%>
答案 1 :(得分:0)
包含<。> 运算符的字符串键用于映射键和对象属性访问。
pageContext.setAttribute(“ my_namespace.VAR_NAME”,VAR_NAME); 将字符串解析为单个令牌。但是检索将不起作用,因为: items =“ $ {my_namespace.VAR_NAME}” 正在将其解析为具有属性“ VAR_NAME”的对象“ my_namespace”。
因此,您不能动态分配键名的名称空间。 :(
作品:
MY_MAP.put("MY_VAR_NAME",(Object)MY_VAR_NAME);
pageContext.setAttribute("MY_MAP",MY_MAP);
items="${MY_MAP.MY_VAR_NAME}"
失败:
pageContext.setAttribute("my_namespace.MY_VAR_NAME", MY_VAR_NAME );
items="${my_namespace.MY_VAR_NAME}"
工作原理,但使用Unicode汉字而不是Unicode的HACK。 :
pageContext.setAttribute("my_namespace丶MY_VAR_NAME");
items="${my_namespace丶MY_VAR_NAME}"
最好对名称空间进行命名以避免混淆:
不清楚:
pageContext.setAttribute("AMBIGIOUS_02",AMBIGIOUS_01 );
items="${AMBIGIOUS_02}"
清除,但不起作用:
pageContext.setAttribute("DOES_NOT_WORK.MyVar",MyVar );
items="${DOES_NOT_WORK.MyVar}"
完整的代码上下文:
<%@ page contentType="text/html; charset=UTF-8" %>
<!--meta tag used to be safe on older browsers.-->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%
String[] MY_VAR_NAME = {"C01","C02","C03"};
Map<String,Object> MY_MAP =(
new HashMap<String,Object>());
pageContext.setAttribute(
"my_namespace.MY_VAR_NAME",MY_VAR_NAME
);
MY_MAP.put("MY_VAR_NAME",(Object)MY_VAR_NAME);
pageContext.setAttribute("MY_MAP",(Object)MY_MAP);
%>
<html lang="en">
<head>
<title> ForEachSimpleTest </title>
</head>
<body>
FOR_EACH_STARTS_HERE
<c:forEach
var="current_item"
items="${MY_MAP.MY_VAR_NAME}"
>
${current_item} <br/>
</c:forEach>
FOR_EACH_ENDS_HERE
</body>
</html>
我尝试过的其他操作:
密钥:
SF: items="#{my_namespace.MY_VAR_NAME}"
SF: items="${my_namespace.MY_VAR_NAME}"
SF: items="${my_namespace.MY_VAR_NAME}"
SF: items="#{my_namespace.MY_VAR_NAME}"
SF: items='${my_namespace[MY_VAR_NAME]}'
SF: items='#{my_namespace[MY_VAR_NAME]}'
SF: items="${param['my_namespace.MY_VAR_NAME']}"
SF: items="#{param['my_namespace.MY_VAR_NAME']}"
SF: items="${param['sessionScope.MY_VAR_NAME']}"
SF: items="#{param['sessionScope.MY_VAR_NAME']}"
SF: items="${param[my_namespace.MY_VAR_NAME]}"
SF: items="#{param[my_namespace.MY_VAR_NAME]}"
SF: items="${sessionScope.MY_VAR_NAME}"
SF: items="#{sessionScope.MY_VAR_NAME}"
SF: items='${my_namespace["MY_VAR_NAME"]}'
SF: items='#{my_namespace["MY_VAR_NAME"]}'
IV : items="${${param['my_namespace.MY_VAR_NAME']}}"
ESE: items="${'#{param["my_namespace.MY_VAR_NAME"]}'}"
QSE: items=${my_namespace["MY_VAR_NAME"]}
QSE: items=#{my_namespace["MY_VAR_NAME"]}
LIT: items="${'my_namespace.MY_VAR_NAME'}"
也值得一提:
保留字:以下字保留给EL和 不应用作标识符:
- 和
- 或
- 不是
- eq
- ne
- lt
- gt
- le
- ge
- true
- false
- 空
- instanceof
- 空
- div
- mod
来源: https://docs.oracle.com/cd/E19798-01/821-1841/gjddd/index.html
$ {}与#{}
那些立即求值的表达式使用$ {}语法。 推迟计算的表达式使用#{}语法。
来源: https://docs.oracle.com/cd/E19226-01/820-7627/gjddd/
已使用堆栈: