現(xiàn)在開始說JSF的優(yōu)勢(shì)。一個(gè)一個(gè)的說,最后整理的時(shí)候再分主次吧,現(xiàn)在先就針對(duì)上面的幾個(gè)問題來說。
1.URL到action method
在JSF中,我們寫一個(gè)按鈕,發(fā)出請(qǐng)求并執(zhí)行某個(gè)action的某個(gè)方法是這樣做的:
在JSF中,我們寫一個(gè)按鈕,發(fā)出請(qǐng)求并執(zhí)行某個(gè)action的某個(gè)方法是這樣做的:
<h:form>
<h:inputText value="#{someAction.text1}"/>
<h:commandButton value="執(zhí)行" action="#{someAction.method1}"/>
</h:form>
<h:inputText value="#{someAction.text1}"/>
<h:commandButton value="執(zhí)行" action="#{someAction.method1}"/>
</h:form>
點(diǎn)擊按鈕的時(shí)候執(zhí)行someAction的method1這個(gè)方法。表單提交到什么URL,怎么調(diào)用到SomeAction.method1,都不需要我們關(guān)心。再看一個(gè)例子也許你會(huì)很吃驚:
<h:form>
<!--循環(huán)someAction中的users集合-->
<ui:repeat value="#{userAction.users}" var="u">
<h:commandButton value="刪除" action="#{userAction.remove(u)}"/><!--看到這個(gè)方法調(diào)用,你是否很吃驚呢?-->
</ui:repeat>
</h:form>
<!--循環(huán)someAction中的users集合-->
<ui:repeat value="#{userAction.users}" var="u">
<h:commandButton value="刪除" action="#{userAction.remove(u)}"/><!--看到這個(gè)方法調(diào)用,你是否很吃驚呢?-->
</ui:repeat>
</h:form>
userAction這個(gè)bean的實(shí)現(xiàn)類里面有一個(gè)remove方法,接收一個(gè)User類型的參數(shù)。在頁面上,循環(huán)過程中,我們直接讓按鈕的action="#{userAction.remove(u)}",于是點(diǎn)擊按鈕的時(shí)候后臺(tái)的action對(duì)象能夠正確的接收到你要?jiǎng)h除的User對(duì)象。那么前后端參數(shù)是怎么傳遞的呢?User對(duì)象被放在什么地方了呢?不需要我們關(guān)心。可以看到,上面的代碼幾乎沒有HTTP細(xì)節(jié)相關(guān)的內(nèi)容。
---------------
不如關(guān)心一下,講講jsf的原理.
這個(gè)系列基本上是科普,原理剖析以后有機(jī)會(huì)再寫。呵呵
注意看一下你的EL的版本。應(yīng)該是2.x才對(duì)。
我用jsf1.x的時(shí)候,默認(rèn)也是不支持這個(gè)形式的,最后把el換成了jboss-el才ok。jsf2的話應(yīng)該用el2.x就可以了吧。