操作 Web 视图中 w3c dom 的侦听器事件



我正在尝试使用 java 中的 w3c.dom.events 处理按钮上的单击事件,但我收到"无法对非静态方法进行静态引用 addEventListener"的错误,请帮助我。这是我的代码。

Node button = form.getElementsByTagName("button").item(0);
if(button!=null && button.hasAttributes()){
NamedNodeMap attr = button.getAttributes();
for(int j=0; j<attr.getLength(); j++){
Attr atribute = (Attr)attr.item(j);
if(atribute.getValue().equals("submit")){
System.out.println("submit button detected.");
org.w3c.dom.events.EventListener listener = new org.w3c.dom.events.EventListener(){
@Override
public void handleEvent(org.w3c.dom.events.Event evt) {
System.out.println("this is a action listener.");
}
};
((EventTarget) button)org.w3c.dom.events.EventTarget.addEventListener("click", listener, false); //here i am getting the error
}
}
}

您收到的错误"无法对非静态方法 addEventListener 进行静态引用"表示: 方法:addEventListener不是一个静态方法 - 这意味着你不能直接从它的类调用它,你需要创建一个实现"EventTarget"的对象来调用它。

((EventTarget) button)org.w3c.dom.events.EventTarget.addEventListener("click", listener, false); 

因此,如果我们分解这行代码,我们有:一个名为 'button' 的对象上强制转换的类型:(EventTarget)button,然后是 OTHER 类型转换为方法调用addEventListener返回的任何内容(void)。所以基本上计算机看到的是你在EventTarget接口内调用了addEventListener方法(这是不可能的,因此错误,因为该方法不是静态的,你不能直接从类/接口调用它)并且你正在将其类型转换为类型EventTarget. 另请注意:接口中的静态方法不能存在。

要解决此问题,只需使用您创建的按钮对象来添加Eventlistener

((EventTarget)button).addEventListener("click", listener, false);

因此,在本例中,您将按钮类型转换为事件目标。请注意.,它现在允许您将事件侦听器添加到对象(按钮)。

导入时出现问题。这是我解决和修改的代码。

`public class DetectForm {
private HTMLInputElement password = null;
private HTMLInputElement username = null;
private boolean isForm = false;
public void detect(Document doc){

if (doc!=null && doc.getElementsByTagName("form").getLength() > 0) {
HTMLFormElement form = (HTMLFormElement) doc.getElementsByTagName("form").item(0);
NodeList nodes = form.getElementsByTagName("input");
for (int i = 0; i < nodes.getLength(); i++) {
if(nodes.item(i).hasAttributes()){
NamedNodeMap attr = nodes.item(i).getAttributes();
for (int j=0 ; j<attr.getLength();j++){
Attr atribute = (Attr)attr.item(j);
if(atribute.getValue().equals("password")){
System.out.println("Password detected");
password = (HTMLInputElement) nodes.item(i);
username = (HTMLInputElement) nodes.item(i-1);
//                          password.setValue("helloword");
//                          username.setValue("helloword");
isForm = true;
}
}
}
}
EventListener listener = new EventListener() {
@Override
public void handleEvent(Event evt) {
System.out.println("action listener from DOM.");
if(username!=null && password!=null){
String user = username.getValue();
String pass = password.getValue();
}

}
};
if(isForm){
Node button = form.getElementsByTagName("button").item(0);
if(button!=null && button.hasAttributes()){
NamedNodeMap attr = button.getAttributes();
for(int j=0; j<attr.getLength(); j++){
Attr atribute = (Attr)attr.item(j);
if(atribute.getValue().equals("submit")){
System.out.println("submit button detected.");
((EventTarget) button).addEventListener("click", listener, false);
}
}
}
}
}


}
}
`