2015-02-03 2 views
0

wildfly 8.1 및 javaee7에서 jsf2.2를 사용하고 있습니다.@PostConstruct가 PhaseListener에서 호출되지 않았습니다.

phaselistener 나의 CDI 빈 주입이 예상 작품으로,하지만 @PostConstuct 방법은 내가 가진 phaselistener에 주석을 시도

을 invocked되지 않습니다

@ javax.enterprise.context.ApplicationScope, SessionScope과 아무 소용이 종속 .

이름 짓기와 별개로 이것은 내 게시물 구조에서 정확한 작업입니다.

//@ApplicationScope 
//@SessionScope 
//@Dependent 
public class MyPhaseListener implements PhaseListener { 

    @Inject 
    @Any 
    private Instance<MyOrderedUrlHandler> myOrderedUrlhandlers; 
    private Map<String, List<MyOrderedUrlHandler> orderedUrlHandlersMap; 

    @PostConstruct 
    void mapOrderedUrlHandlers() { 
     LOG.info("Executing postconstruct"); 
     orderedUrlHandlersMap = Maps.newHashMap(); 

     for(final MyOrderedUrlHandler urlhandler : myOrderedUrlhandlers) { 
     final String handles = urlhandler.url(); 
     final List<MyOrderedUrlHandler> registeredHandlers = orderedUrlHandlersMap.get(handles); 

     if(registeredHandlers == null) { 
      registeredHandlers = Lists.newArraList(); 
     } 
     registeredHandlers.add(urlHandler); 
     orderedUrlHandlersMap.put(handles, registeredHandlers); 
     } 
    } 
} 

메서드 수준 주입도 제대로 작동합니다.

@PostConstruct 콜백이 jsf phaselistener specs의 일부가 아닌 경우입니까?

+0

코드를 표시하십시오. '@ PostConstruct'에 대한 계약을 위반했을 수도 있습니다 – kolossus

+0

당신과 명시적인 기본 생성자가 있다면 어떨까요? – Kukeltje

+0

@Kukeltje 기본 생성자는 무엇을 의미합니까? phaselistener가 호출되면 '@PostConstruct'가 호출되지 않는 것이 문제입니다. 이 경우 명시 적 기본 생성자가 어떻게 도움이됩니까? – maress

답변

3

JSF 2.2 spec의 5.4.1 절에 따르면 PhaseListener은 관리 빈이 아니지만 주사 할 수 있습니다.

섹션 5.4.2에 따라 관리 빈은 라이프 사이클 주석 @PostConstruct@PreDestroy을 지원해야합니다.

PhaseListener은 JSF와 관련하여 관리 빈이 아니므로 단계 수신기 구현이 @PostConstruct을 지원해야한다는 스펙을 따르지 않습니다.

+0

답변으로 받아 들일지라도, 라이프 사이클 이벤트 지원없이 종속성 주입이 지원된다는 것은 이상한 것처럼 보입니다. – maress

관련 문제