webentwicklung-frage-antwort-db.com.de

Methode muss Signatur "String method () ... [etc] ..." haben, aber Signatur "void method ()"

Ich habe eine Datentabelle mit einem Button in jeder Zeile:

<ice:dataTable ... var="item">
  <ice:column>
    <h:commandButton value="Download" action="#{mybean.downloadItem(item)}" />
  </ice:column>
</ice:dataTable>

In der Hintergrundbohne gibt es diese Methode:

public void downloadItem(Item item) {
    // ...
}

Alles funktioniert einwandfrei (wenn auf die Methode geklickt wird), aber die Eclipse-Validierung schlägt mit der folgenden seltsamen Meldung fehl:

Die Methode muss die Signatur "String-Methode (), String-Methode (), String-Methode (String), String-Methode (String, String), String-Methode (String, String, String), String-Methode (String, String, String)" haben. , String-Methode (String, String, String, String, String), String-Methode (String, String, String, String, String, String), String-Methode (String, String, String, String, String, String, String, String), String Methode (String, String, String, String, String, String, String, String), String Methode (String, String, String, String, String, String, String, String, String), String Methode (String, String, String, String, Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge), Zeichenfolge-Methode (Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge), Zeichenfolge-Methode (Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette), Zeichenkettenmethode (Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette), Zeichenkette Methode (S Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette), Zeichenkettenmethode (Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette), Zeichenkettenmethode (Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette), Zeichenkette Methode (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String), String Methode (String, String, String, String, String, String, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette), Zeichenkettenmethode (Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette, Zeichenkette Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge) "hat jedoch die Signatur" void method () "

Was kann ich tun?

Wenn dies relevant ist, verwende ich Eclipse Indigo SR1 auf Tomcat 7.

64
hugri

Ignoriere es. Eclipse ist ein Idiot. Sie können dies korrigieren, indem Sie Window> Preferences> Web> JavaServer Faces Tools> Validation> Typenzuweisungsprobleme> Inkompatibilität von Methodenausdruckssignaturen einstellen Warning oder Ignore (standardmäßig Error).

enter image description here

Ausgeliehenes Bild von diesem Blog mit freundlicher Genehmigung.

Der Grund dafür ist, dass Eclipse erwartet, dass das Attribut action immer String und nicht void zurückgibt. Obwohl im JSF-Attribut action nicht angegeben, unterstützen die EL-Methodenausdrücke selbst auch void -Methoden. Die übereifrige Nachricht weist wiederum darauf hin, dass die zugrunde liegende Logik, die für diese Validierung verantwortlich ist, nicht in der Lage ist, die einzelnen Methodenargumente zu bestimmen, und versucht daher, die rohe Methodensignatur mit einer Sammlung zulässiger Signaturen zu vergleichen, die letztendlich in der Nachricht angezeigt werden, wenn keine Übereinstimmung vorliegt gefunden. Basierend auf der Nachricht kann dieses Problem auch verschwinden, wenn die Methode 20 oder mehr Argumente enthält.

Dies ist in Eclipse Luna SR1 behoben, fast 6 Jahre nachdem das Problem gemeldet wurde. Der Schweregrad wurde von Fehler auf Warnung verringert. Vielleicht möchten Sie es noch tiefer setzen auf Ignorieren.

Siehe auch:

131
BalusC