在scriptlet<%XY%>中直接使用EL $ {XY}

时间:2012-12-23 00:16:06

标签: java jsp el scriptlet

在我的项目中,我每次打开JSP时都要对变量进行设置。 我在JSP和EL <% %>中使用scriptlet ${}进行了尝试,后者将变量返回。

但似乎没有用。

 <% String korrekteAntwort=${frage.korrekteAntwort};%>
 <%session.setAttribute("korrekteAntwort", korrekteAntwort);%>

korrekteAntwort=${}之后出现错误,是否可以在scriptlet中直接将变量与EL进行对齐?

1 个答案:

答案 0 :(得分:9)

您正在混合 scriptlet 和EL并期望它们“同步”运行。那是行不通的。 The one is an oldschool way of writing JSPsthe other is a modern way of writing JSPs。你应该使用其中一个,而不是两个。

回到具体问题,在引擎盖下,EL通过PageContext#findAttribute()解析变量。所以在 scriptlets中完全相同

Frage frage = (Frage) pageContext.findAttribute("frage");
session.setAttribute("korrekteAntwort", frage.getKorrekteAntwort());

然而,如上所述,这是一种使用JSP的老式学习方式,而不一定是the functional requirement which you've had in mind, but didn't tell anything about的“最佳”方式。现代JSP方式将使用JSTL <c:set>

<c:set var="korrekteAntwort" value="${frage.korrekteAntwort}" scope="session" />

这将在会话范围内以${korrekteAntwort}的那一行开头,这正是 scriptlet 的行。