这是我的jsp页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test EL</title>
</head>
<body>
<p>
<%
/* Creation */
String[] animals = {"dog", "cat", "mouse", "horse"};
request.setAttribute("animals" , animals);
%>
${ animals[2] }<br />
</p>
</body>
我不明白的是:指令的效用是什么:&#34; request.setAttribut&#34;,我已经宣布了表格,我不知道为什么当我删除那条指令我无法得到动物[2]的价值..我在这里想念的是什么?!
答案 0 :(得分:0)
${}
这是一个JSP EL表达式。 EL只能引用作用域变量,而不能引用本地变量。 Scoped 变量是对作为属性添加的对象的引用,可用于pageContext
,request
,{{1}的四个范围中的任何一个}和session
。
在您的示例中,application
是本地变量,因此无法通过String[] animals
自行访问。要使${}
数组可用于JSP EL,需要首先将其放入任何一个可用范围。
因此,在您的示例中,以下内容将数组放在animals
范围内。
request
您还可以根据应用程序要求使用以下任何一种方法。
// restricted to current request cycle
request.setAttribute("animals" , animals);
// restricted to this JSP page
pageContext.setAttribute("animals" , animals);
// restrcited to this user's session
session.setAttribute("animals" , animals);
// available throughout the application
application.setAttribute("animals" , animals);
按以下顺序自动解析上述任何一个范围内的对象:首先查找${animals[i]}
,然后pageContext
,然后request
,最后session
。
要覆盖上述查找顺序,范围也可以明确指定为
application
答案 1 :(得分:0)
除了Ravi之外,如果您仍想在不设置其中一个属性的情况下访问数组,请使用jsp表达式标记显示:
Eg: <%=animals[2]%> <br/>
答案 2 :(得分:0)
正如ServletRequest documentation中提到的那样,setAttribute()
方法用于在请求中存储属性,以便您以后可以访问它。
${variable}
是一个用于在Web应用程序中轻松访问这些存储数据的jsp EL,请查看JSP - Expression Language (EL)以获取有关它的更多信息。
如果您在声明变量的同一页面中,可以避免使用setAttribute()和EL并使用out.print()
打印变量结果,如下所示:
<% out.println(animals[2]);%>