2013-09-24 29 views
3

我正在使用JSF和PrimeFaces,但我需要獲取組件ID的值。因爲我使用不同的id構建dinamycally面板,以顯示我需要比較的面板,如果是當前面板,則顯示它。如何在EL中獲取當前組件的ID

例如,如果我在下一個面板

<p:outputPanel id="#{bean.getID}" autoUpdate="true" 
    renderer=#{@this.id == bean.currentPanel} 
> 
</p:outputPanel> 

和豆類

public class Bean(){ 
    private int numberPanels =0; 
    private int currentPanel = 0; 

    public int getID(){ 
    //...a process that return different ID 
    } 
    // getter's and setters 

}

顯然,@this.id不起作用。那麼,如何用PrimeFaces獲得組件ID的ID值?

+0

首先,您應該使用'#{bean.ID}'而不是#{bean.getID}'。其次,你不應該在你的getters方法中有業務邏輯,參見[這裏](http://stackoverflow.com/q/2090033/1065197)(如果你仍然堅持把業務邏輯放在getter中,不要抱怨性能問題稍後= \\)。對於這個問題,我想你可以動態綁定' 。我沒有測試過,但可以做你想要/需要的(但是你應該把'bean.currentPanel'改爲'String')。 –

+0

相關:http://stackoverflow.com/q/8168302/1065197 –

+1

@LuiggiMendoza除了getter,文本中至少有3個拼寫錯誤! – skuntsel

回答

7

在EL作用域中有一個隱含的#{component}對象,該對象評估爲當前UI組件。根據這些信息,您將獲得以下屬性:

rendered="#{component.id eq bean.currentPanel}" 
+0

你可以發佈任何文檔到這個'#{component}'嗎? –

+3

@Luiggi:它在JSF 2規範(第5-25頁)的5.6.2.1章節的「getValue」表項中列出,當然在已知的[JSF 2中的通信](http://balusc.blogspot。 com/2011/09/communication-in-jsf-20.html#ImplicitELObjects)文章。 – BalusC

+0

@LuiggiMendoza它在JSF 2.0規範「用於Facelets和編程訪問的隱式對象ELResolver」的5.6.2.1節中列出。 – skuntsel