El método debe tener la firma “String method () … …” pero tiene la firma “void method ()”

Tengo una tabla de datos con un botón en cada fila:

     

En el bean de respaldo hay este método:

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

Todo funciona bien (cuando se hace clic en el método se ejecuta), pero la validación de Eclipse falla con este extraño mensaje:

El método debe tener la firma “String method (), String method (), String method (String), String method (String, String), String method (String, String, String), String method (String, String, String, String) , Método de cadena (Cadena, Cadena, Cadena, Cadena, Cadena), Método de cadena (Cadena, Cadena, Cadena, Cadena, Cadena, Cadena), Método de Cadena (Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena), Cadena método (Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena), Método de Cadena (Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena), Método de Cadena (Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena), Método de Cadena (Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena), Método de Cadena (Cadena, Cadena, Cadena, 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 método (S) tring, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena), Método de cadena (Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena, Cadena), Cadena método (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String), Método de cadena (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) “pero tiene firma” método de vacío () ”

¿Que puedo hacer?

Si eso es relevante, estoy usando Eclipse Indigo SR1 en Tomcat 7.

Ignoralo. Eclipse es un idiota. Puede activarlo configurando Ventana> Preferencias> Web> Herramientas JavaServer Faces> Validación> Problemas de asignación de tipo> Integridad de firma de expresión de método en Advertencia o Ignorar (su valor predeterminado es Error ).

enter image description here

Imagen tomada de este blog con toda cortesía.

El motivo es que Eclipse espera que el atributo de action siempre devuelva String , no es void . Aunque en realidad no se especifica en el atributo de action JSF, las expresiones del método EL en realidad también son compatibles con los métodos void . El mensaje demasiado entusiasta sugiere a su vez que la lógica subyacente responsable de esta validación es incapaz de determinar los argumentos del método individual e intenta comparar la firma del método sin procesar con una colección de firmas permitidas, que finalmente se muestran en el mensaje si no hubo coincidencia encontró. Según el mensaje, este problema también puede desaparecer cuando el método tiene 20 o más argumentos;)

Esto se soluciona en Eclipse Luna SR1, casi 6 años después de que se informara el problema. La gravedad ha disminuido de Error a Advertencia . Aún puede querer ponerlo aún más bajo para Ignorar .

Ver también:

  • Eclipse issue report 243674
  • Diferencias entre acción y acción