2009-12-25 21 views
2

我想使用EL在jsp中使用傳遞給它的參數調用bean的函數。 問題是,它不允許這樣的: 「$ {teacherBean.certificationFor($ {} particularField)」如何訪問EL變量並將其作爲參數傳遞給EL中的函數?

的事情是我想遍歷數組,並調用該函數certificationFor在所有的值數組作爲參數傳遞。 我通過獲取數組中的值:

所以基本上我想要做的事,如: $ {teacherBean.certificationFor($ {particularField}) ,但我不能這樣做。 我可以用其他方式做到這一點嗎?

我是EL的新手。 :) 任何幫助表示讚賞。

回答

0

什麼:

${teacherBean.certificationFor(particularField)} 
4

如果你想做到這一點,對於究竟是什麼?只是爲了獲得顯示的價值?至少,在Java EE 6之前的標準EL中,不能像這樣傳遞方法參數。在JBoss-ELJava EE 6 EL你可以做到這一點。語法會然後只是一直:

${teacherBean.certificationFor(particularField)} 

請注意,您不能嵌套EL表達式,EL表達式已經在自己的整體表現。

在標準EL實現中,您可以使用括號表示法通過鍵訪問Map值。因此,如果例如有一個Map<String, String> certifications,其中鍵所對應的particularField和值相關的值:

private Map<String, String> certifications = new HashMap<String, String>(); 

public Map<String, String> getCertificationFor() { 
    return this.certifications; 
} 

那麼你可以使用下面的符號:

${teacherBean.certificationFor[particularField]} 

這解決了幕後

teacherBean.getCertificationFor().get(particularField) 
0

如果您正在訪問是更好的表述爲一個單獨的函數的一般功能的能力,你可以使用其他EL implmentation,

${certificationFor[teacherBean][particularField]} 

其中certificationFor映射到延伸ELMethod.java類CertificationFor類:那麼你可以如下寫。您可以在result(Object[] args)方法中實現該功能。此方法的參數是您傳遞給EL中的${certificationFor}對象的參數。

public class CertificationFor extends ELMethod { 
    public Object result(Object[] args) { 
    TeacherBean teacherBean = (TeacherBean) args[0]; 
    String property = (String) args[1]; 

    // your implementation goes here 
    return ....; 
    } 
} 

訣竅是將您的對象用作地圖的鏈接地圖,這是將多個參數傳遞給EL函數的一種方法。

如果你有興趣,你可以看到完整的代碼和代碼段在這裏: http://www.vineetmanohar.com/2010/07/how-to-pass-parameters-in-el-methods/

相關問題