方法必须有签名“String method()… …”,但签名“void method()”

我有一个数据表和每行中的一个button:

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

在backing bean中有这个方法:

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

一切正常(单击该方法执行时),但Eclipsevalidation失败,这个奇怪的消息:

方法必须有签名“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方法(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)“但具有签名”无效方法()

我能做什么?

如果这是相关的,我在Tomcat 7上使用Eclipse Indigo SR1。

忽略它。 Eclipse是一个混蛋。 您可以通过将“ 窗口”>“首选项”>“Web”>“JavaServer Faces工具”>“validation”>“types分配问题”>“方法expression式签名不兼容性”设置为“ 警告”或“ 忽略” (默认为“ 错误”

在这里输入图像描述

图片从这个博客全部礼貌借用。

原因是,Eclipse期望action属性总是返回String ,而不是void 。 虽然在JSF action属性中的确没有指定,但EL方法expression式本身实际上也支持void方法。 过度的信息反过来表明,负责这种validation的底层逻辑不能确定单个方法参数,因此它试图比较原始方法签名和允许签名的集合,如果不匹配,最终会显示在消息中find。 基于该消息,当该方法具有20个或更多个参数时,该问题也可能消失;)

在Eclipse Luna SR1中已经解决了这个问题,这个问题已经有近6年的时间了。 严重程度从“ 错误”降低到“ 警告” 。 你可能仍然想把它放低到忽略

也可以看看:

  • Eclipse问题报告243674
  • action和actionListener之间的区别