Метод должен иметь подпись "String method()... [etc]...", но имеет подпись "void method()"

У меня есть данные с кнопкой в ​​каждой строке:

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

В резервном bean есть этот метод:

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

Все работает нормально (при нажатии на метод выполняется), но Подтверждение Eclipse завершается с этим странным сообщением:

Метод должен иметь подпись "String method(), String method(), String метод (String), метод String (String, String), метод String (String, String, String), String метод (String, String, String, String), String метод (String, String, String, String, String), метод String (String, String, String, String, 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 метод (String, String, String, String, String, String, String, String, String, String, String), String метод (String, String, String, String, String, String, String, String, String, String, String, String), String метод (String, String, String, String, String, String, String, String, String, String, String, String, String), String метод (String, String, String, String, String, String, String, String, String, String, String, String, String, String), String метод (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String), String метод (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String), String метод (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String), String метод (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String), String метод (String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String)", но имеет подпись "void method()"

Что я могу сделать?

Если это актуально, я использую Eclipse Indigo SR1 на Tomcat 7.

Ответ 1

Игнорируйте его. Eclipse - это рывок. Вы можете настроить его, установив "Окно" > "Установки" > "Веб" > "Инструменты JavaServer" > "Проверка" > "Задачи назначения типов" > "Невозможность распознавания выражений метода" в "Предупреждение" или "Игнорировать" (по умолчанию это ошибка).

введите описание изображения здесь

Изображение, заимствованное из этого блога во всей любезности.

Причина в том, что Eclipse ожидает, что атрибут action всегда будет возвращать String, а не void. Несмотря на то, что атрибут JSF action действительно не определен, сами формулы EL-метода также поддерживают методы void. В свою очередь, чрезмерное сообщение говорит о том, что основная логика, ответственная за эту проверку, неспособна определить индивидуальные аргументы метода и, таким образом, пытается сравнить сигнатуру необработанного метода с коллекцией разрешенных подписей, которые в конечном итоге отображаются в сообщении, если совпадение не было найденный. На основе сообщения эта проблема также может исчезнуть, когда метод имеет 20 или более аргументов;)

Это исправлено в Eclipse Luna SR1, почти через 6 лет после сообщения о проблеме. Степень серьезности уменьшена с "Ошибка до предупреждения". Вы все еще можете поставить его ниже, чтобы игнорировать.

См. также: