这个Java代码在JSP中的错误是什么?

时间:2013-06-28 09:44:14

标签: java javascript jsp scriplets

<%RemovableStorageEventListener listener = new RemovableStorageEventListener() { 
public void inserted(Storage storage) {%>
    enableButton();
<%} 
public void removed(Storage storage) {%>
    disableButton();
<%} }; 

BundleContext bc = AppManager.getInstance().getBundleContext();
StorageManager sm = StorageManager.getInstance(KSFUtility.getInstance().getApplicationContext(bc));
sm.addListener(listener);
%>

我在

中的Start_jsp.java中收到错误
  

out.write( “\ n \吨\ tenableButton(); \ n \ t” 的);和   out.write( “\ n \吨\ tdisableButton(); \ n \ t” 的);

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);

这是我的javascript

function enableButton(){
document.getElementById('scan').disabled=false;
}

function disableButton(){
document.getElementById('scan').disabled=true;
}

1 个答案:

答案 0 :(得分:0)

您必须制作out变量final,否则您将无法在anonymous类中访问它(在您的情况下,在{{1}的实现中}})

Java不支持true closures(Java 8应该支持它们),即使使用像你在这里使用的匿名类(RemovableStorageEventListener RemovableStorageEventListener(){...}` )看起来像是一种封闭。

变量new是局部变量。使用匿名类创建的对象可能会持续到保存out变量的块完成之后。当它完成时,变量(out)将从堆栈中清除,因此它将不再存在。同时,匿名类对象引用该变量。如果匿名类对象在清理完变量后尝试访问该变量,那将会发生严重错误。

通过使它out,它不再是真正的变量,而是一个常数。