Метод должен иметь подпись «String method () ... [etc] ...», но имеет подпись «void method ()» - PullRequest
63 голосов
/ 10 ноября 2011

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

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

В бэк-бине есть такой метод:

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

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

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

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

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

1 Ответ

130 голосов
/ 10 ноября 2011

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

enter image description here

Изображение взято из этого блога во всех любезных целях.

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

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

См. Также:

...