我有一个数据表,每行都有一个按钮:
<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方法(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 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 method(String,String,String,String,String,String,String,String, 字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串, String,String,String)“但是有签名”void method()“
我该怎么办?
如果这是相关的,我在Tomcat 7上使用Eclipse Indigo SR1。
答案 0 :(得分:130)
忽略它。 Eclipse是一个混蛋。你可以通过设置 Window&gt;来调整它。偏好&gt;网络&gt; JavaServer Faces工具&gt;验证&gt;类型分配问题&gt;方法表达式签名不兼容 警告或忽略(默认为错误)。
图像从this blog借来的所有礼貌。
原因是,Eclipse希望action
属性始终返回String
,而不是void
。虽然在JSF action
属性中确实未指定,但EL方法表达式本身实际上也支持void
方法。过度热心的消息反过来表明负责此验证的基础逻辑无法确定单个方法参数,因此它尝试将原始方法签名与允许签名集合进行比较,如果没有匹配则最终会在消息中显示找到。基于该消息,当该方法具有20个或更多参数时,此问题也可能消失;)
这一问题已在Eclipse Luna SR1中得到修复,问题发布后近6年。严重性已从错误降低到警告。您可能仍希望将其降低到忽略。