2015-07-13 50 views
-1

在WildFly9我們使用Spring的數據,我們有一個JSP與這樣的工作代碼(網頁類型PageImpl):直接調用,而不是財產超的getter方法拋出javax.el.MethodNotFoundException

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

但這行不工作:

${page.isFirst()} 

我們得到javax.el.MethodNotFoundException

這是一個bug或者也許我已經從EL文檔錯過了什麼?

我縮小了這個問題:我們試圖在這個對象上調用一個'橋接方法',並且橋接方法不能被應用服務器看到。我發現這個在這個來源: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

我認爲它應該適用於這種語法,至少在更新的JEE版本中。也許更多的上下文會幫助? – user140547

回答

0

在WildFly9中,EL方法的分辨率從之前的版本改變了。從現在開始,我們無法到達橋接方法,因爲它們被WildFly的方法解析器過濾掉了。

如果我們在項目中使用公共圖書館,我們可以比我們預期的更頻繁地滿足Bridge方法。最簡單的情況是有一個包含私有類的公共方法和一個公共類擴展了它。在這種情況下,子類中會有一個橋接方法,我們無法在WildFly9'-EL中使用這種方法。

Parent.java

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

Child.java

public class Child extends Parent { 
} 

JSP

${child.methodToCall()} 
相關問題