2013-01-17 35 views
3

我繼續讀帖子這不能不說ActionListener的方法必須具有以下signiture方法:JSF - ActionListener的標籤要求不採取一個ActionEvent參數

public void calledByActionListener(ActionEvent e) { 
} 

調用,像這樣:

<p:commandButton value="Example" id="example" process="@this" ajax="false" 
    actionListener="#{exampleBean.calledByActionListener()}"> 

不過,我有這樣的無參數方法:

public void calledByActionListener() { 
} 

確實有什麼改變?

回答

4

是的,這是新的EL 2.2調用具有自定義參數的方法的功能。基本上,你明確地調用一個無參數的方法。這個構造是合法的。

請注意,這與JSF2無關。 EL 2.2恰好是Java EE 6的一部分,就像JSF2一樣。所以它看起來像一個新的JSF2功能。但事實上並非如此。作爲證據,JSF2向後兼容Java EE 5,因此隱含了EL 2.1,但這種構造在那裏不起作用。

當在方法表達式中未明確指定任何自定義參數時,JSF將按照說明在實際方法中假定默認參數爲ActionEvent

+0

感謝您的澄清。這是說,actionListener =「#{exampleBean.calledByActionListener()}」通過EL2.2是有效的,但actionListener =「#{exampleBean.calledByActionListener}」(無括號)會假定ActionEvent的默認參數? – 8bitjunkie

+1

這是正確的。如果你用圓括號明確指定任何參數,它將覆蓋默認簽名。即使這是一個沒有爭議的'()'。順便說一下,'action'方法也是如此,它已經默認爲一個沒有爭議的方法。 – BalusC

+0

再次感謝BalusC! – 8bitjunkie