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

pyt*_*sIV 4 java jsp el scriptlet

在我的项目中,我每次打开JSP时都要对变量进行设置.我<% %>在JSP和EL中使用scriptlet尝试了它,${}它给出了变量.

但它似乎不起作用.

 <% String korrekteAntwort=${frage.korrekteAntwort};%>
 <%session.setAttribute("korrekteAntwort", korrekteAntwort);%>
Run Code Online (Sandbox Code Playgroud)

之后有一个错误korrekteAntwort=${},是不是可以在scriptlet中直接从EL中转换变量?

Bal*_*usC 9

你正在混合scriptlet和EL,并期望它们"同步"运行.那是行不通的.一个是写的JSP的旧校园的方式另一种是写的JSP的现代生活方式.你应该使用其中一个,而不是两个.

回到具体问题,在引擎盖下,EL解决变量PageContext#findAttribute().所以在scriptlet中完全相同.

Frage frage = (Frage) pageContext.findAttribute("frage");
session.setAttribute("korrekteAntwort", frage.getKorrekteAntwort());
Run Code Online (Sandbox Code Playgroud)

然而,正如所说的,这是一种使用JSP的老式学习方式,并不一定是您考虑过的功能要求的"最佳"方式,但没有说明任何内容.现代JSP方式将使用JSTL <c:set>:

<c:set var="korrekteAntwort" value="${frage.korrekteAntwort}" scope="session" />
Run Code Online (Sandbox Code Playgroud)

这将在会话范围内${korrekteAntwort}从该行开始可用,这正是该行的scriptlet所做的.