web-dev-qa-db-fra.com

La méthode doit avoir la signature "String method () ... [etc] ..." mais la signature "void method ()"

J'ai une table de données avec un bouton dans chaque ligne:

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

Dans le bean de sauvegarde, il y a cette méthode:

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

Tout fonctionne bien (lorsque vous cliquez dessus, la méthode est exécutée), mais la validation Eclipse échoue avec ce message étrange:

La méthode doit avoir la signature "Méthode String (), Méthode String (), Méthode String (String), Méthode String (String, String), Méthode String (String, String, String), Méthode String (String, String, String, String) , Méthode String (chaîne, chaîne, chaîne, chaîne, chaîne), méthode chaîne (chaîne, chaîne, chaîne, chaîne, chaîne, chaîne), méthode chaîne (chaîne, chaîne, chaîne, chaîne, chaîne, chaîne, chaîne, chaîne), chaîne méthode (chaîne, chaîne, chaîne, chaîne, chaîne, chaîne, chaîne, chaîne), méthode chaîne (chaîne, chaîne, chaîne, chaîne, chaîne, chaîne, chaîne, chaîne, chaîne), méthode chaîne (chaîne, chaîne, chaîne, String, String, String, String, String, String, String), méthode String (String, String, String, String, String, String, String, String, String, String, String, String), méthode String (String, String, String, String, String, String, String, String, String, String, String, String), méthode String (String, String, String, String, String, String, String, String, String, String, String, String, String, String), String méthode (S tring, String, String, String, String, String, String, String, String, String, String, String, String, String), String method (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String), méthode String (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String), String méthode (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String), String method (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String), String method (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String) "mais a la signature" void method () "

Que puis-je faire?

Si cela est pertinent, j'utilise Eclipse Indigo SR1 sur Tomcat 7.

64
hugri

Ignorez-le. Eclipse est un con. Vous pouvez le tonifier en définissant Fenêtre> Préférences> Web> Outils JavaServer Faces> Validation> Problèmes d'affectation de type> Incompatibilité de signature d'expression de méthode à Avertissement ou Ignorer (il s'agit par défaut de Erreur ).

enter image description here

Image empruntée à ce blog en toute courtoisie.

La raison en est qu'Eclipse s'attend à ce que l'attribut action renvoie toujours String, pas void. Bien qu'elles ne soient pas spécifiées dans l'attribut JSF action, les expressions de méthode EL elles-mêmes prennent également en charge les méthodes void. Le message trop zélé suggère à son tour que la logique sous-jacente responsable de cette validation est incapable de déterminer les arguments de la méthode individuelle et essaie donc de comparer la signature de la méthode brute avec une collection de signatures autorisées, qui sont finalement affichées dans le message si aucune correspondance n'a été trouvée. a trouvé. En fonction du message, ce problème peut également disparaître lorsque la méthode a 20 arguments ou plus;)

Ce problème est résolu dans Eclipse Luna SR1, près de 6 ans après le signalement du problème. La gravité a été réduite de Erreur à Avertissement . Vous pouvez toujours vouloir le mettre encore plus bas pour Ignorer .

Voir également:

131
BalusC