在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));
}
}
但我仍然不明白为什么我们无法达到这个简单的方法。
答案 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()}