我可以将JSP scriptlet中的variables传递给JSTL,但不能将JSTL中的variables传递给JSP scriptlet

以下代码会导致一个错误:

1. <c:set var="test" value="test1"/> 2. <% 3. String resp = "abc"; 4. resp = resp + test; 5. pageContext.setAttribute("resp", resp); 6. %> 7. <c:out value="${resp}"/> 

错误说

 "error a line 4: unknown symbol 'test'". 

如何将test从JSTL代码传递到JSP脚本?

脚本是embedded在页面代码中的原始Java,如果你在脚本中声明了variables,那么它们将成为embedded在页面中的局部variables。

相比之下,JSTL完全使用范围的属性,无论是在pagerequestsession范围。 你需要重写你的脚本来作为一个属性进行test

 <c:set var="test" value="test1"/> <% String resp = "abc"; String test = pageContext.getAttribute("test"); resp = resp + test; pageContext.setAttribute("resp", resp); %> <c:out value="${resp}"/> 

如果您查看<c:set>的文档,您会看到您可以将scope指定为pagerequestsession ,并且默认为page

更好的是,不要使用脚本:他们让宝宝耶稣哭泣。

@skaffman钉了下来。 他们各自生活在各自的背景下。 但是,我不会考虑使用scriptlets作为解决scheme。 你想避免它们。 如果你只想在EL中连接string,并且发现EL中的string失败(这是正确的),那么只需要:

 <c:out value="abc${test}" /> 

或者,如果从另一个名为${resp}作用域variables获得abc ,则执行:

 <c:out value="${resp}${test}" />