2014-11-25 38 views
1

是什麼在jsf中使用括號和沒有括號的回調bean方法之間的區別?

<h:commandLink actionListener="#{serviceProviderBean.method}" value="Save" /> 

<h:commandLink actionListener="#{serviceProviderBean.method()}" value="Save" /> 

之間的差都調用相同的方法或任何錯誤在上面的代碼

+0

如果兩者都能正常工作...... :)我認爲它涉及到使用的EL分析器版本。早期版本不支持使用大括號調用方法,並嘗試將「方法」解析爲get或set方法。如果我記得正確(例如表中的當前對象),也可以將參數添加到大括號中。 – wemu 2014-11-25 07:50:22

+0

如何知道EL分析器版本? – 2014-11-25 07:52:24

+0

它是應用程序服務器/ servlet容器/ tomcat /東西的一部分。對於tomcat,EL spec版本在此處列出:http://tomcat.apache.org/whichversion.html - EL分析器可以重新配置。在大括號正式進入EL規範之前,JBoss EL相當有名。 – wemu 2014-11-25 08:18:47

回答

0

二不會在tomcat6中工作,這將與tomcat7工作/ JSF2

0

兩者都是優良。第二個被用於傳遞PARAMS像

<h:commandLink actionListener="#{serviceProviderBean.save(someBean.someOption)}" 
    value="Save" /> 
0

我想你也必須使用方法牙套,當你想使用返回一個布爾值的方法,但是沒有在bean中定義匹配的屬性。

我今天有這種情況。 我的xhtml頁面有<h:panelGroup ...>rendered="#{bean.isLoggedIn}"屬性。 isLoggedIn方法調用邊界的方法,因此該bean沒有匹配的屬性private boolean isLoggedIn。 由於缺失屬性,我得到了一個異常。 將大括號添加到呈現的屬性中,使其成爲rendered="#{bean.isLoggedIn()}"它正常工作。

無論如何。該方法現在被刪除,因爲我的bean不應該做業務邏輯的東西:D

+0

你在這裏遇到了錯字和/或誤解。 maching屬性是'private boolean loggedIn',而不是'isLoggedIn'。然而,你的觀點是錯誤的。它只是歸結爲EL分析器版本。例如,我可以自由使用'#{bean.searchPerson}',而那些屬性不是。這是一個沒有任何參數的方法。 – alexander 2016-06-27 06:45:51

相關問題