15.3. JavaServer Faces
15.3.1. DelegatingVariableResolver
JSF 웹 계층과 스프링의 미들티어와 연동하는 가장 쉬운 방법은 DelegatingVariableResolver 클래스를 사용하는 것입니다.
faces-context.xml 파일을 다음과 같이 수정합니다.
<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>
<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 구현체의 기본 리졸버에게 위임할 것이고, 그 다음에 스프링의 비즈니스 문맥이 담긴 WebApplicationContext에 위임합니다. 이 방법을 사용해서 간단하게 JSF에 의해 관리되는 bean들에 의존성을 주입할 수 있습니다.
JSF가 관리하는 bean들은 faces-config.xml에 정의 되어 있으며 아래의 예제에서 #{userManager}는 스프링의 비즈니스 문맥으로부터 가져오는 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>
<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>
15.3.2. FacesContextUtils
faces-config.xml에 있는 bean들(JSF 빈)의 한 프로퍼티를 주입할 때는 위와 같은 방법이 용이합니다. 그러나 명시적으로 스프링 bean이 왕창 필요할 때는 FacesContextUtils를 사요할 수 있습니다.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
WebApplicationContextUtils 와 사용법은 유사하며 차이점은 인자로 facesContext를 넘겨준다는 것입니다.