我遇到了我正在处理的项目(不是我的代码)的情况。我是 JSP 的新手,所以很高兴了解发生了什么。
所以我有一个像这样的代码(它已经简化了很多):
<jsp:useBean id="accessManager" scope="session" class="AccessManager" />
<%! Object x = accessManager %>
<% Object y = accessManager %>
第二行不起作用,它不知道accessManager是什么。第三行 (y) 有效。
我知道声明 scriptlet 会转换为 java 类属性或方法,这些属性或方法在 jsp 初始化时执行一次,而普通 scriptlet (<% %>) 会转换为 _jspService 方法。但这两者的范围是什么?或者为什么我无法从声明 scriptlet 访问 bean?
谢谢!
最佳答案
!
用于指定无上下文。
如果您使用<%! Object x = accessManager; %>
它会产生这样的代码。
class Index {
Object x = accessManager;
}
如果您使用<% Object x = accessManager; %>
它会产生这样的代码:
class Index {
public void foo(){
Object x = accessManager;
}
}
查看C:\Program Files\apache-tomcat-*\work\Catalina\localhost\*\org\apache\jsp\
对于生成的 .java 文件。
(这个例子很简单。)
关于java - JSP 声明 scriptlet 访问 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18720488/