[SPRING] JSF 관리 빈에서 Spring 서비스를 사용하는 방법은 무엇입니까?
SPRINGJSF 관리 빈에서 Spring 서비스를 사용하는 방법은 무엇입니까?
JSF는 Java 세계에서 매우 널리 사용되는 기술이지만 Spring과의 협력은 여전히 고통스럽고 '해로운'해킹이 필요합니다. 나는이 '해킹'중 하나에 현재 문제가있다.
스프링 서비스는 SpringBeanFacesELResolver를 사용하여 주입된다. faces-config.xml에 구성됩니다.
<application>
<el-resolver>
org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>
</application>
Spring 서비스의 주입은 매우 못 생기지 만 작동 중이다.
@ManagedProperty(value="#{customerService}")
CustomerService customerService;
그러나 문제가 있습니다. JSF는 관리 Bean을 직렬화 할 수 있어야한다고 요구한다. 즉, Spring 서비스도 직렬화 가능해야하거나 필드가 일시적이어야합니다. 필드가 일시적 일 때 주입이 작동하지 않습니다 (해당 필드에 null이 있음). 그리고 Spring 서비스를 직렬화 가능하게 만드는 것은 좋은 생각이 아니며 잠재적 인 성능 문제가 아닙니다. Hibernate 컨텍스트, 데이터 소스, 모든 것이 Spring 서비스에 주입되는 것은 무엇입니까?
JSF 관리 빈에서 Spring 서비스를 사용하는 정확하고 덜 고통스러운 방법은 무엇입니까?
해결법
-
==============================
1.나는 org.springframework.web.jsf.el.SpringBeanFacesELResolver에 대해서도 많은 이슈를 경험했다. 주로 객체 범위를 일치시키는 것과 관련이 있습니다 (Spring은 JSF의 뷰 범위 및 대화 범위와 동등하지 않습니다). 어떤 사람들은 직렬화 문제에 대해서도 불평합니다.
나는 org.springframework.web.jsf.el.SpringBeanFacesELResolver에 대해서도 많은 이슈를 경험했다. 주로 객체 범위를 일치시키는 것과 관련이 있습니다 (Spring은 JSF의 뷰 범위 및 대화 범위와 동등하지 않습니다). 어떤 사람들은 직렬화 문제에 대해서도 불평합니다.
나는이 기사에서 제안 된 해결책을 성공적으로 적용했다 : http://www.beyondjava.net/blog/integrate-jsf-2-spring-3-nicely/.
필자의 경우 직렬화는 문제가 아니었고 빈 범위에만 관심이있었습니다. 스프링 빈 수명주기를 방해하지 않고 JSF가 백킹 빈 라이프 사이클을 완벽하게 관리하기를 바랬다.
Spring 컨텍스트를로드하고 JSF 컨텍스트에서 Spring 관리 Bean에 액세스하기 위해 autowire하도록 JSF 관리 빈을 만들었습니다.
나는 다음 JSF bean 수퍼 클래스를 개발했다.
public abstract class AutowireableManagedBean { protected AutowireCapableBeanFactory ctx; @PostConstruct protected void init() { logger.debug("init"); ctx = WebApplicationContextUtils .getWebApplicationContext( (ServletContext) FacesContext.getCurrentInstance() .getExternalContext().getContext()) .getAutowireCapableBeanFactory(); // The following line does the magic ctx.autowireBean(this); } ... }
그런 다음 구체적인 JSF 백킹 빈은 다음과 같이 보였다 (문제없이 뷰 범위를 사용할 수 있었다).
@ManagedBean @ViewScoped public class MyBackingBean extends AutowireableManagedBean { @Autowired private MyDao myDao;
from https://stackoverflow.com/questions/13497528/how-to-use-spring-services-in-jsf-managed-beans by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 3.2 @ResponseBody가 Model 반환 값으로 작동하지 않습니다. (0) | 2019.02.21 |
---|---|
[SPRING] Spring 데이터 저장소는 주석없이 작동합니다. (0) | 2019.02.21 |
[SPRING] 스프링 보안을 사용하여 비밀번호 변경하기 (0) | 2019.02.21 |
[SPRING] Spring, Hibernate Lazy Loading, sessionFactory 및 OpenSessionInViewFilter (0) | 2019.02.21 |
[SPRING] 자기 참조 클래스를 가진 Java Hibernate json 무한 재귀 (0) | 2019.02.21 |