直接调用超类getter方法而不是属性抛出javax.el.MethodNotFoundException

时间:2015-07-13 08:42:39

标签: jsp el wildfly

在WildFly9中,我们使用Spring Data,我们有一个JSP,其代码类似于此(页面类型为PageImpl):

${page.first}
${page.last}
${page.isLast()}

但这条线不起作用:

${page.isFirst()}

我们得到javax.el.MethodNotFoundException

这是一个错误还是我错过了EL文档中的内容?

我缩小了问题范围:我们尝试在此对象上调用“桥接方法”,并且appserver无法看到桥接方法。我在此来源中找到了这个:https://github.com/jboss/jboss-el-api_spec/blob/master/src/main/java/javax/el/Util.java

List<Wrapper> result = new ArrayList<>();
for (Method method : methods) {
  if (method.getName().equals(name) && !method.isBridge()) {
     result.add(new MethodWrapper(method));
  }
}

但我仍然不明白为什么我们无法达到这个简单的方法。

1 个答案:

答案 0 :(得分:0)

在WildFly9中,EL方法分辨率已从先前版本更改。从现在开始,我们无法达到桥接方法,因为它们被WildFly的方法解析器过滤掉了。

如果我们在项目中使用公共库,我们可以比预期更频繁地满足Bridge方法。最简单的情况是有一个带有公共方法和公共类的包私有类扩展了它。在这种情况下,子类中将有一个桥接方法,我们无法在WildFly9'-s EL中达到此方法。

Parent.java

class Parent {
    public String methodToCall() {
        return "value";
    }
}

Child.java

public class Child extends Parent {
}

JSP

${child.methodToCall()}