是什麼在jsf中使用括號和沒有括號的回調bean方法之間的區別?
<h:commandLink actionListener="#{serviceProviderBean.method}" value="Save" />
和
<h:commandLink actionListener="#{serviceProviderBean.method()}" value="Save" />
之間的差都調用相同的方法或任何錯誤在上面的代碼
是什麼在jsf中使用括號和沒有括號的回調bean方法之間的區別?
<h:commandLink actionListener="#{serviceProviderBean.method}" value="Save" />
和
<h:commandLink actionListener="#{serviceProviderBean.method()}" value="Save" />
之間的差都調用相同的方法或任何錯誤在上面的代碼
二不會在tomcat6中工作,這將與tomcat7工作/ JSF2
兩者都是優良。第二個被用於傳遞PARAMS像
<h:commandLink actionListener="#{serviceProviderBean.save(someBean.someOption)}"
value="Save" />
我想你也必須使用方法與牙套,當你想使用返回一個布爾值的方法,但是沒有在bean中定義匹配的屬性。
我今天有這種情況。 我的xhtml頁面有<h:panelGroup ...>
和rendered="#{bean.isLoggedIn}"
屬性。 isLoggedIn
方法調用邊界的方法,因此該bean沒有匹配的屬性private boolean isLoggedIn
。 由於缺失屬性,我得到了一個異常。 將大括號添加到呈現的屬性中,使其成爲rendered="#{bean.isLoggedIn()}"
它正常工作。
無論如何。該方法現在被刪除,因爲我的bean不應該做業務邏輯的東西:D
你在這裏遇到了錯字和/或誤解。 maching屬性是'private boolean loggedIn',而不是'isLoggedIn'。然而,你的觀點是錯誤的。它只是歸結爲EL分析器版本。例如,我可以自由使用'#{bean.searchPerson}',而那些屬性不是。這是一個沒有任何參數的方法。 – alexander 2016-06-27 06:45:51
如果兩者都能正常工作...... :)我認爲它涉及到使用的EL分析器版本。早期版本不支持使用大括號調用方法,並嘗試將「方法」解析爲get或set方法。如果我記得正確(例如表中的當前對象),也可以將參數添加到大括號中。 – wemu 2014-11-25 07:50:22
如何知道EL分析器版本? – 2014-11-25 07:52:24
它是應用程序服務器/ servlet容器/ tomcat /東西的一部分。對於tomcat,EL spec版本在此處列出:http://tomcat.apache.org/whichversion.html - EL分析器可以重新配置。在大括號正式進入EL規範之前,JBoss EL相當有名。 – wemu 2014-11-25 08:18:47