26

我正在尝试检索由 JSP 页面中的 servlet 设置的属性值,但我只能通过${param}. 我不确定我能做些什么不同的事情。也许它很简单,但我还无法管理它。

public void execute(HttpServletRequest request, HttpServletResponse response) {

    //there's no "setParameter" method for the "request" object
    request.setAttribute("attrib", "attribValue");

    RequestDispatcher rd = request.getRequestDispatcher("/Test.jsp");
    rd.forward(request,response);
}

在 JSP 中,我一直在尝试检索“attribValue”,但没有成功:

<body>
    <!-- Is there another tag instead of "param"??? -->
    <p>Test attribute value: ${param.attrib}
</body>

如果我通过所有进程(调用页面、servlet 和目标页面)传递一个参数,它的效果非常好。

4

4 回答 4

33

它已经在默认的 EL 范围内可用,所以只需

${attrib}

应该做。

如果您想明确指定范围(EL 将依次搜索页面、请求、会话和应用程序范围,以查找与属性名称匹配的第一个非空属性值),那么您需要通过范围映射来引用它,这是${requestScope}针对请求范围的

${requestScope.attrib}

这仅在您可能在页面范围内具有完全相同名称的属性时才有用,否则会获得优先权(但这种情况通常表明设计不佳)。

也可以看看:

于 2012-06-05T14:13:48.880 回答
10

EL也许语法和语法之间的比较scriptlet会帮助您理解这个概念。

  • param就好像request.getParameter()
  • requestScope就好像request.getAttribute()

你需要request attributerequest parameter.

于 2015-01-28T03:29:59.203 回答
2

您是否尝试过使用表达式标签?

<%= request.getAttribute("attrib") %>
于 2012-06-05T13:56:07.753 回答
2

如果范围是请求类型,我们使用 in request 设置属性并使用in jsprequest.setAttribute(key,value)检索。${requestScope.key}

于 2019-03-09T14:32:52.680 回答