2012-05-30 3 views
2

빈과 같은 중앙 지점의 구성 요소에 이벤트 리스너를 등록 할 수있는 방법이 있습니까?JSF에서 Bean의 구성 요소에 이벤트 리스너를 등록하는 방법은 무엇입니까?

이렇게 할 수 있나요?

@PostConstruct 
public void setup() { 
    FacesContext facesContext = FacesContext.getCurrentInstance(); 
    UIViewRoot view = facesContext.getViewRoot(); 
    view.getComponentByName("toolBar:save").addActionListener(com.sample.SaveListener); 
    view.getComponentByName("form:save").addActionListener(com.sample.SaveListener); 
} 

답변

2

빈의 (포스트) 구성 중에는 모든 구성 요소가 반드시 제공되는 것은 아닙니다. 빈은 EL이 처음으로 #{bean}을 해결할 필요가있을 때마다 생성되며 너무 빠를 수도 있습니다. 대신 프리 렌더 뷰 이벤트 중에 수행하십시오.

이보기에 다음 태그를 추가합니다 :

<f:event type="preRenderView" listener="#{bean.setup}" /> 

이 그럼 당신은 그 방법에 필요한 작업을 수행 할 수 있습니다

public void setup() { 
    UIViewRoot view = FacesContext.getCurrentInstance().getViewRoot(); 
    ((UICommand) view.findComponent("toolBar:save")).addActionListener(new com.sample.SaveListener()); 
    ((UICommand) view.findComponent("form:save")).addActionListener(new com.sample.SaveListener()); 
} 
+0

와우, 감사 alot을! 당신은 방금 내 하루를 보냈습니다 :)이 방식으로 컴포넌트에 비 액션 리스너를 추가하는 방법이 있습니까? – Budenzauber

+0

'SystemEventListener' 또는'ComponentSystemEventListener' 구현과 함께'Application # subscribeToEvent()'를 사용할 수도 있습니다. – BalusC

+0

다시 한번 감사 드리며,이 2면을 자세히 살펴 보겠습니다. – Budenzauber

관련 문제