我有一个支持 bean,其中包含一些共享相同名称但具有不同签名的方法,例如:
public void voteUp( Member member, ObjectA object ) { ... }
public void voteUp( Member member, ObjectB object ) { ... }
在示例中,ObjectA
和ObjectB
类型不共享任何共同点。
在我的 Facelet 中,我这样称呼动作:
<h:form>
<h:commandButton action="#{backingBean.voteUp(membre, objectA)}" ... />
</h:form>
...
<h:form>
<h:commandButton action="#{backingBean.voteUp(membre, objectB)}" ... />
</h:form>
但似乎有时(不是随机的,但可能取决于在我的支持 bean 中首先定义的签名),这些 EL 之一调用的方法是错误的,我得到了这些异常之一:
serverError: class javax.faces.el.EvaluationException 无法将 com.test.ObjectA 类型的 com.test.ObjectA@116c1800 转换为 com.test.ObjectB 类
既然我给了我的 EL 一个 type 的对象ObjectA
,为什么它仍然调用带有ObjectB
签名的方法呢?我是不是在这里忘记了一些关于 Java 基础的东西,还是我的 EL 解释器搞砸了?
我使用 GlassFish 3.1.2。
[编辑]只是为了明确我的代码中的其他一切都正常,当我重命名此示例中的两种方法之一时,一切正常。