gpt4 book ai didi

java - 无法从 Scriptlet 中的方法将值返回到屏幕

转载 作者:行者123 更新时间:2023-12-02 00:26:46 24 4
gpt4 key购买 nike

我需要在屏幕上显示一些在 script-let 中定义的方法中读取的值。下面的代码无法编译:

<%!
void displayRecursively(KnowledgeElement ke, ExtendsRelationshipService ers){
List<ExtendsRelationship> erList = null;
%><%=ke.getName()%><br /><%!
try {
erList = ers.findIncomingExtendsKERelationships(ke);
} catch (Exception e) {}
if (erList!=null){
for (ExtendsRelationship er : erList){
KnowledgeElement startKe = er.getStartKE();
displayRecursively(startKe,ers);
}
}
}
%>

<%
KnowledgeElement ke = null;
ke = (KnowledgeElement)request.getAttribute("knowledgeElement");
ExtendsRelationshipService ers = (ExtendsRelationshipService)request.getAttribute("ers");
displayRecursively(ke,ers);
%>

编译错误为:

PWC6199: Generated servlet error:
cannot find symbol
symbol: variable ke
location: class org.apache.jsp.WEB_002dINF.ke_jsp

使用 .. %><%=ke.getName()%><% .. 也无法编译。有人可以建议如何解决这个问题吗?

最佳答案

Servlet 容器按照这种方法将 JSP 代码编译成 servlet 类:

  • 当使用“<%! ... %>”scriptlet 符号时,您定义的代码将成为 servlet 类本身的一部分,从而允许您定义函数。
  • 当使用“<% ... %>”scriptlet 符号时,您定义的代码将成为 servlet 本身的“服务”方法的一部分。

因此,您所做的是将在“service”方法外部声明的代码与对将在“service”方法内部复制的变量的引用混合在一起。

为了解决您的问题,我将向您的函数添加另一个参数并替换该“交叉引用”(或任何应该调用的名称)。它看起来像这样:

<%!
void displayRecursively(JspWriter out, KnowledgeElement ke, ExtendsRelationshipService ers){
List<ExtendsRelationship> erList = null;
out.print(ke.getName());
out.println("<br />");
try {
erList = ers.findIncomingExtendsKERelationships(ke);
} catch (Exception e) {}
if (erList!=null){
for (ExtendsRelationship er : erList){
KnowledgeElement startKe = er.getStartKE();
displayRecursively(out, startKe,ers);
}
}
}
%>

在其他 scriptlet 中调用该函数时,您必须传递对 PrintWriter 的引用(这是“service”方法内部的 scriptlet 的隐式变量):

displayRecursively(out, ke, era);

请注意,您需要在 JSP 中导入“JspWriter”类才能进行编译。

关于java - 无法从 Scriptlet 中的方法将值返回到屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com