2012-04-18 72 views
2

我看到幾個問題,詢問如何將參數傳遞給JSF方法。使用EL2.2和servlet 3.0,它使用戶可以將參數傳遞給方法調用。 一個例子:How to pass an argument to method from rendered h:outputText?問題是:在JSF 2.x中,每個標籤屬性都應該採用ValueExpression或MethodExpression。在鏈接的例子中,「渲染」應該只採用ValueExpression。但是我確實看到它仍然適用於MethodExpression,如果我們把()清除它是一個方法調用而不是一個屬性。這是JSF 2.x規範剛剛搞砸了還是我錯過了什麼?爲什麼EL 2.2的JSF 2.x允許MethodExpression用於ValueExpression?

回答

1

在值表達式中使用新的EL 2.2 invoking-methods-with-arguments語法不會自動使其成爲方法表達式或其他東西。這仍然是一個價值表達。值表達式使用給定EL表達式的返回值作爲值。方法表達式在與組件關聯的動作事件時調用給定的EL表達式。

EL表達式本身是否調用屬性getter方法或具有參數的任意方法對於如何處理整個EL表達式無關緊要。

+0

BalusC,非常感謝您的快速回復。我喜歡你的JSF博客,它對我有很大的幫助。你的回答是有道理的。但是我仍然有困惑。使用EL的技術(例如JSF 2.x)決定EL是否被視爲ValueExpression或MethodExpression。因此,如果對於JSF操作屬性,我使用action =「aBean.aMethod()」,如果aMethod返回文字字符串「aBean.action」,那麼您是否說在aBean中的操作方法將被調用? EL表達式中的聲音總是在JSF的機制之前首先被調用,如果我們在EL中有(),那麼它將使用getter而不是調用方法。 – 2012-04-18 13:42:50

+0

不,它是以每個屬性爲基礎來決定的標籤處理程序。您可以在[標籤文檔](http://docs.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/)中看到它的處理方式(選中「類型」列,例如[ 'H:commandButton'](http://docs.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/h/commandButton.html))。這不依賴於EL語法。 – BalusC 2012-04-18 13:44:16

+0

同意,標籤處理程序決定。但標籤處理程序來自JSF實現。所以這是JSF決定的。我剛剛修改了這些意見。如果你有時間,你能詳細說明一下嗎?謝謝。 – 2012-04-18 13:49:48