簡體   English   中英

JSF 2.0和參數化EL表達式的問題

[英]Problems with JSF 2.0 and parametrized EL Expressions

我在嘗試使用參數訪問某些屬性時遇到了一些麻煩。 好吧,我不知道它們是否應該被稱為屬性,因為訪問器有參數,但現在讓我們調用它們的屬性。

情況是這樣的:

我有一個Student類,它包含不同的本地化作為地圖中的對象。 我可以通過這樣做獲得這些本地化對象:

student.getLocalizedData(String localizationCode);

現在,在頁面上,我正在嘗試這樣做:

<h:inputText value="#{collegeBean.student.getLocalizedData('es').profileDescription}"/>

學生的描述可以有很多本地化。

頁面加載正確,但是當我嘗試保存學生時,它表示bean collegeBean沒有屬性getLocalizedData,但是那個bean是包含在bean上的學生的屬性。

我知道這條線是瘋了,所以我試着把它包起來:

<h:inputText value="#{collegeBean.getStudentLocalizedData('es').profileDescription}"/>

唉,我再次得到同樣的信息。

我發現的唯一解決方案就是制作一個完全包裹了studen't sproperty的方法......但是這為我的每個本地化留下了兩種方法(get + set),而且這只適用於一個屬性。 這意味着我將結束(2個本地化x屬性)數量的方法!

有什么方法可以用最動態的方式來解決這個問題嗎? 本地化的大量可能在將來發生變化,我不想更改任何代碼。

編輯:我正在使用JBoss 6.1.0.Final和它附帶的JSF實現JSF 2.0.3-b05

這應該在理論上有效,所以我懷疑使用的EL實現中存在錯誤或疏忽。 您可能想嘗試不同的EL實現(不同的服務器make)或升級服務器。 如果徒勞無功,請將其作為錯誤報告給服務器供應商。

但是,由於您實際上將getLocalizedData()委托給了Map ,因此最好不要這樣做,而是直接返回整個Map

public Map<String, LocalizedData> getLocalizedData() {
    return localizedData;
}

以便您可以按如下方式使用它

<h:inputText value="#{collegeBean.student.localizedData.es.profileDescription}"/>

或者,如果需要的話

<h:inputText value="#{collegeBean.student.localizedData['es'].profileDescription}"/>

根據我的經驗,大多數接受參數的EL實現都是以某種方式出錯。 我最滿意的是Tomcat 7的EL。

請注意,您可以使用Mojarra和MyFaces的自定義EL實現。 我通常將Tomcat與我的應用程序捆綁在一起,因此我可以信賴一個穩定的功能集。 但是你必須小心,因為如果沒有正確配置所有內容,你可能會遇到類加載器問題。

鑽嘴魚科:

<context-param>
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>YOUR EL IMPLEMENTATION EXPRESSION FACTORY</param-value>
</context-param>

MyFaces的:

<context-param>
    <param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
    <param-value>YOUR EL IMPLEMENTATION EXPRESSION FACTORY</param-value>
</context-param>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM