方法必须有签名“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之间的区别