Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从jsp中的pageContext对象获取属性_Java_Jsp_Servlets - Fatal编程技术网

Java 无法从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

我没有从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方法时,这可以正常工作。

尝试将代码更改为:

<%

    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和 不应用作标识符:

  • 不是
  • 情商
  • 东北
  • 中尉
  • 燃气轮机
  • 通用电气
  • 真的
  • 假的
  • 空的
  • 瞬间
  • 空的
  • div
  • 国防部
  • 资料来源:

    ${}vs#{}

    立即计算的表达式使用${}语法。 计算延迟的表达式使用{}语法

    资料来源:

    使用的堆栈:

    • 记事本++
    • 马文
    • 雄猫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'}"