Integrating JSF and Spring


Chúng tôi hiện đang sử dụng JSF và Spring, tôi có thể nói rằng để hiểu rõ cơ chế của 2 framework không phải là khó. Tôi đang sử dụng 2 cách khác nhau khi cần truy cập vào manage bean bởi Spring. Một là sử dụng delegating resolverFacesContextUtils

1) Delegating Resolver

Ví dụ chúng ta có 1 lớp với tên FacadeService và có tham chiếu gọi tới ISomeService để thực thi. Ngoài ra ISomeService  được quản lý bởi Spring. Đầu tiên là phải định nghĩa đối tượng vơi tên FacadeService :

package yourpackagename;
public class FacadeService {
private ISomeService someService;
public ISomeService getSomeService() {
return someService;
}
public void setSomeService(ISomeService someService) {
this.someService = someService;
}
}
– Tiếp theo là định nghĩa FacadeService là 1 manage bean trong faces-config.xml . Mỗi bean định nghĩa 1 backing bean cho trang jsf của bạn:
//FacadeService  :
<managed-bean-class>
yourpackagename.FacadeService
</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
<managed-property>
<property-name>someService</property-name>
<property-class>
packagename.ISomeService
</property-class>
<value>#{someService}</value>
</managed-property>
</managed-bean>
//Backing bean name
<managed-bean-class>
yourpackagename.backingBeanClass
</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>facadeService</property-name>
<property-class>
packagename.FacadeService
</property-class>
<value>#{facadeService}</value>
</managed-property>
</managed-bean>
– Do vậy delegating resolver cần phải được định nghĩa trong faces-config.xml nằm trong thẻ <application> tương ứng:
<application>
<variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>;
</application>
– Tiếp theo đưa thông tin spring vào web.xml :
<context-param>
<param-name>contextConfigLocation/WEB-INF/applicationContext.xml
</context-param>
– Tùy chọn applicationContext.xml đưa vào thông tin tham chiếu các thư viện :
org.springframework.web.context.ContextLoaderListener
– Đây là Spring XML quản lý someService bean :
public class YourBackingBean{
protected FacadeService facadeService;
public FacadeService getFacadeService() {
return facadeService;
}
public void setFacadeService(FacadeService facadeService) {
this.facadeService = facadeService;
}
}
/*
There is an important note here, using the #{facadeService} you can get the value of the FacadeService managed by Faces, the default variable resolver of JSF will bring it for you. Also you can get the SomeService object by writing the appropriate accessor methods and replacing the value binding expression with #{someService}. The default variable resolver will not find “someService” and the responsibility will pass to the DelegatingVariableResolver of Spring which will return the someService name. Long story short, here comes the fun part, accessing the spring bean from code behind, for example at anywhere in your jsf code behind you can reach the spring bean by;
getFacadeService().getSomeService().someMethod(); //If everything is ok, hopefully no npe
These steps allows the JSF-Spring integration, inversion of control is applied both by spring and faces, facadeservice is managed by Faces and these are wired using the delegating variable resolver of spring. Important thing is spring bean is not injected by spring, the wiring is done by faces. Spring’s role is a container in this case.
*/
2) Using the FacesContextUtils :
– FacesContextUtils là 1 lớp đối tượng nằm trong framework Spring
ISomeService someService = (ISomeService) FacesContextUtils
.getWebApplicationContext(FacesContext.getCurrentInstance())
.getBean(“someService”);
someService.someMethod();

Gửi phản hồi

Please log in using one of these methods to post your comment:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s