我可以将变量从JSP脚本发送到JSTL,但不能从JSTL转到JSP脚本,而不会出错

StackOverflow https://stackoverflow.com/questions/3570191

以下代码导致错误:

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

错误说

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

我如何通过 test 从JSTL代码到JSP Scriptlet?

有帮助吗?

解决方案

脚本是在页面代码中嵌入的RAW JAVA,如果您在脚本中声明变量,则它们成为页面中嵌入的本地变量。

相比之下,JSTL完全与范围属性合作,要么 page, request 或者 session 范围。您需要重新编写脚本钓鱼 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 作为 page, request 或者 session, ,默认为 page.

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

其他提示

@Skaffman将其钉住。他们在自己的环境中生活。但是,我不会考虑使用scriptlet作为 解决方案。你想 避免 他们。如果您想要的只是在EL中的串联串,您发现 + 操作员因EL中的字符串而失败(正确),然后只做:

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

或者如果 abc 是从一个名称的另一个范围变量获得的 ${resp}, , 然后做:

<c:out value="${resp}${test}" />
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top