JSP中的Java代码有什么错误?
这是我的javascriptJSP中的Java代码有什么错误?,java,javascript,jsp,scriptlet,Java,Javascript,Jsp,Scriptlet,这是我的javascript RemovableStorageEventListener listener = new RemovableStorageEventListener() { public void inserted(Storage storage) { out.write("\n\t\tenableButton();\n\t"); } public void removed(Storage storage) { out.write("\n\t\tdisableButto
RemovableStorageEventListener listener = new RemovableStorageEventListener() {
public void inserted(Storage storage) {
out.write("\n\t\tenableButton();\n\t");
}
public void removed(Storage storage) {
out.write("\n\t\tdisableButton();\n\t");
} };
BundleContext bc = AppManager.getInstance().getBundleContext();
StorageManager sm = StorageManager.getInstance(KSFUtility.getInstance().getApplicationContext(bc));
sm.addListener(listener);
您必须将
设置为out
变量final
,否则您将无法在匿名类中访问它(在您的情况下,在RemovableStorageEventListener的实现中)
Java不支持true(Java 8应该支持它们),即使使用像您在这里使用的匿名类(new
RemovableStorageEventListener(){…}`)看起来像一种闭包
变量out
是局部变量。使用匿名类创建的对象可能会一直持续到保存out
变量的块完成之后。当它完成时,变量(out
)将从堆栈中清除,因此它将不再存在。同时,匿名类对象引用该变量。如果匿名类对象在清理变量后试图访问该变量,那么事情就会变得非常糟糕
通过使其成为final
,它不再是真正的变量,而是一个常量。您收到的具体错误是什么?无法在另一个方法中定义的内部类中引用非final变量。我无法使其成为final…因为eclipse自动生成Start\u jsp.java。
RemovableStorageEventListener listener = new RemovableStorageEventListener() {
public void inserted(Storage storage) {
out.write("\n\t\tenableButton();\n\t");
}
public void removed(Storage storage) {
out.write("\n\t\tdisableButton();\n\t");
} };
BundleContext bc = AppManager.getInstance().getBundleContext();
StorageManager sm = StorageManager.getInstance(KSFUtility.getInstance().getApplicationContext(bc));
sm.addListener(listener);
function enableButton(){
document.getElementById('scan').disabled=false;
}
function disableButton(){
document.getElementById('scan').disabled=true;
}