Я работаю с ExpressionFactory внутри моей программы, и я хочу, чтобы ValueExpressions и переменные были доступны из JSP с выражениями EL.
Я не могу что-то понять: похоже, что мои переменные я переопределяю обычным образомпеременные, например, те, которые установлены тегом forEach при итерации.Я думаю, что мой код помещает пользователя в pageScope, и, безусловно, делает это для тега forEach, но я ошибаюсь.
Как мне работать с выражениями фабрики и значений, чтобы я мог обращаться к переменным, если они не переопределены, а не наоборот, как в следующем примере?:
<%@page import="javax.el.ValueExpression"%>
<%@page import="javax.el.ELContext"%>
<%@page import="javax.el.ExpressionFactory"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Check Scopes</title>
</head>
<body>
<%
ExpressionFactory ef = JspFactory.getDefaultFactory().
getJspApplicationContext(application).getExpressionFactory();
ELContext ec = pageContext.getELContext();
ValueExpression ve = ef.createValueExpression(ec, "humangus", String.class);
pageContext.getELContext().getVariableMapper().setVariable("user", ve);
String[]users = new String[]{"mike", "bob", "kate"};
pageContext.setAttribute("users", users);
%>
<h3>List of Users:</h3>
<c:forEach var="user" items="${users}" varStatus="status">
${status.count}:
without specifying scope: ${user},
from page scope: ${pageScope.user}<br/>
</c:forEach>
</body>
</html>
Это приводит к следующему:
Список пользователей:
1: безуказание области действия: humangus, из области просмотра страницы: mike
2: без указания области действия: humangus, из области просмотра страницы: bob
3: без указания области действия: humangus, из области действия страницы: kate