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