直接调用超类 getter 方法而不是 属性 抛出 javax.el.MethodNotFoundException
Calling superclass getter method directly instead of property throws javax.el.MethodNotFoundException
在 WildFly9 中,我们使用 Spring 数据,我们有一个 JSP 的工作代码如下(页面类型为 PageImpl):
${page.first}
${page.last}
${page.isLast()}
但是这条线不起作用:
${page.isFirst()}
我们得到javax.el.MethodNotFoundException
这是一个错误还是我遗漏了 EL 文档中的某些内容?
我缩小了问题范围:我们尝试在此对象上调用 'bridge method',应用服务器看不到桥接方法。我在这个来源中找到了这个: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));
}
}
但是我还是不太明白为什么我们不能达到这个简单的方法。
在 WildFly9 中,EL 方法分辨率与以前的版本有所不同。从现在开始我们无法访问桥接方法,因为它们被 WildFly 的方法解析器过滤掉了。
如果我们在项目中使用 public 库,我们会比预期更频繁地遇到 Bridge 方法。最简单的情况是有一个包 private class 和一个 public 方法和一个 public class 扩展了这个。在这种情况下,child class 中将有一个桥接方法,我们无法在 WildFly9'-s EL 中访问此方法。
Parent.java
class Parent {
public String methodToCall() {
return "value";
}
}
Child.java
public class Child extends Parent {
}
JSP
${child.methodToCall()}
在 WildFly9 中,我们使用 Spring 数据,我们有一个 JSP 的工作代码如下(页面类型为 PageImpl):
${page.first}
${page.last}
${page.isLast()}
但是这条线不起作用:
${page.isFirst()}
我们得到javax.el.MethodNotFoundException
这是一个错误还是我遗漏了 EL 文档中的某些内容?
我缩小了问题范围:我们尝试在此对象上调用 'bridge method',应用服务器看不到桥接方法。我在这个来源中找到了这个: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));
}
}
但是我还是不太明白为什么我们不能达到这个简单的方法。
在 WildFly9 中,EL 方法分辨率与以前的版本有所不同。从现在开始我们无法访问桥接方法,因为它们被 WildFly 的方法解析器过滤掉了。
如果我们在项目中使用 public 库,我们会比预期更频繁地遇到 Bridge 方法。最简单的情况是有一个包 private class 和一个 public 方法和一个 public class 扩展了这个。在这种情况下,child class 中将有一个桥接方法,我们无法在 WildFly9'-s EL 中访问此方法。
Parent.java
class Parent {
public String methodToCall() {
return "value";
}
}
Child.java
public class Child extends Parent {
}
JSP
${child.methodToCall()}