Java 无法从jsp中的pageContext对象获取属性
我没有从jsp中的pageContext对象获取属性,代码:Java 无法从jsp中的pageContext对象获取属性,java,jsp,servlets,Java,Jsp,Servlets,我没有从jsp中的pageContext对象获取属性,代码: <% String username =request.getParameter("name"); if(username!=null){ //session.setAttribute("sessionUsername", username); //application.setAttribute("appUsername", username); pageCon
<%
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方法时,这可以正常工作。尝试将代码更改为:
<%
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")%>
请求范围名称为:
会话范围名称为:
应用程序作用域名称为:
致:
请求范围名称为:
会话范围名称为:
应用程序作用域名称为:
字符串包含“.”运算符的键用于映射键和对象属性访问
setAttribute(“my_namespace.VAR_NAME”,VAR_NAME);
将字符串解析为单个标记。但是检索不起作用,因为:
items=“${my_namespace.VAR_NAME}”
正在将其解析为具有属性的对象“my_namespace”“VAR_NAME”
因此,您不能在运行时将密钥名称命名为命名空间:(
有效:
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}"
失败:
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的黑客“丶" 用汉字代替“.”:
pageContext.setAttribute("my_namespace丶MY_VAR_NAME");
items="${my_namespace丶MY_VAR_NAME}"
最好将事情名称空间化以避免歧义:
不清楚:
清除,但不起作用:
代码的完整上下文:
<%@ 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>
同样值得一提的是:
保留字:以下字是为EL和
不应用作标识符:
- 记事本++
- 马文
- 雄猫9
- 赫罗库
<%@ 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'}"