?
This document uses PHP Chinese website manual Release
JavaServer Faces (JSF) 是一個基于組件的,事件驅(qū)動的 Web 框架。這個框架很受歡迎。
Spring 與 JSF 集成的關(guān)鍵類是 DelegatingVariableResolver
。
將 Spring 中間層與 JSF Web 層整合的最簡單辦法就是使用
DelegatingVariableResolver
類。
要在應(yīng)用中配置變量解析器(Variable Resolver),你需要編輯 faces-context.xml 文件。
在 <faces-config/>
元素里面增加一個 <application/>
元素和一個 <variable-resolver/>
元素。
變量解析器的值將引用 Spring 的 DelegatingVariableResolver
。例如:
<faces-config> <application> <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver> <locale-config> <default-locale>en</default-locale> <supported-locale>en</supported-locale> <supported-locale>es</supported-locale> </locale-config> <message-bundle>messages</message-bundle> </application> </faces-config>
DelegatingVariableResolver
首先會將查詢請求委派到 JSF 實現(xiàn)的
默認(rèn)的解析器中,然后才是 Spring 的“business context” WebApplicationContext
。
這使得在JSF 所管理的 bean 中使用依賴注射非常容易。
JSF 所管理的 bean 都定義在 faces-config.xml
文件中。
下面例子中的 #{userManager}
是一個取自 Spring 的“business context”的 bean。
<managed-bean> <managed-bean-name>userList</managed-bean-name> <managed-bean-class>com.whatever.jsf.UserList</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>userManager</property-name> <value>#{userManager}</value> </managed-property> </managed-bean>
如果所有屬性已經(jīng)映射到 faces-config.xml 文件中相關(guān)的bean,
一個自定義的 VariableResolver
也可以工作的很好。
但是有些情況下你需要顯式獲取一個bean。這時,
FacesContextUtils
可以使這個任務(wù)變得很容易。它類似于
WebApplicationContextUtils
,
不過它接受 FacesContext
而不是 ServletContext 作為參數(shù)。
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
我們推薦使用 DelegatingVariableResolver
實現(xiàn) JSF 和 Spring 的集成。
如果你想要更全面的集成,可以看看
JSF-Spring 這個項目。