web-dev-qa-db-ja.com

メソッドには署名「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 method(String)、String method(String、String)、String method(String、String、String)、String method(String、String、String、String) 、Stringメソッド(String、String、String、String、String)、String method(String、String、String、String、String、String)、String method(String、String、String、String、String、String、String)、String method(String、String、String、String、String、String、String、String)、String method(String、String、String、String、String、String、String、String、String)、String method(String、String、String、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング)、ストリング・メソッド(ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング)、ストリング・メソッド(ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング)、ストリングメソッド(ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング)、ストリングメソッド(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、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング・メソッド(ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング)、ストリングmethod(String、String、String、String、String、String、String、String、String、String、String、String、String、String、String、String、String)、String method(String、String、String、String、String、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング)、ストリングメソッド(ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、ストリング、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列)」が署名「void method()」

私に何ができる?

関連する場合は、Tomcat 7でEclipse Indigo SR1を使用しています。

64
hugri

それを無視します。 Eclipseは不機嫌です。 Window> Preferences> Web> JavaServer Faces Tools> Validation> Type Assignment Problems> Method expression signature incompatibilitytoWarningまたはIgnore(デフォルトはError)。

enter image description here

このブログ からの画像はすべて礼儀正しく借りました。

その理由は、Eclipseはaction属性がStringではなく、常にvoidを返すことを期待しているためです。実際、JSF action属性では指定されていませんが、ELメソッド式自体もvoidメソッドを実際にサポートしています。過度に熱心なメッセージは、この検証に関与する基になるロジックが個々のメソッド引数を決定できないことを示唆しているため、未処理のメソッドシグネチャを許可されたシグネチャのコレクションと比較しようとし、一致しない場合に最終的にメッセージに表示されます見つかりました。メッセージに基づいて、この問題はメソッドに20個以上の引数がある場合にも消える可能性があります;)

この問題は、問題が報告されてから約6年後にEclipse Luna SR1で修正されました。重大度はErrorからWarningに減少しました。まだIgnoreより低くすることもできます。

こちらもご覧ください:

131
BalusC